PHPで描写した数値がJSから読み取れない問題にハマった。
かなりハマった。。
特定のカラムを下記のようなSubmitで削除しようとするがエラーが出て、Submit出来ない。
<script> function deletePost(e) { 'use strict'; if (confirm('本当に削除しますか?')) { document.getElementById('form_' + e.dataset.id).submit(); } } </script>
エラー
Uncaught TypeError: document.getElementById(...) is null table
このエラーの解消はどこを探しても出てこなかった。
原因は、「テーブルのtd外ではPHPで描写したものは拾えない」ことが原因だったようで、下記のような書き方をするとエラーが出ます。x
<tbody> <form action="{{ route('company_del', ['id'=>$list->id]) }}" id="form_{{ $list->id }}" method="post"> @csrf @if(count($company) > 0) @foreach ($company as $list) <tr> <td>{{ $list->id }}</td> <td>{{ $list->code }}</td> <td>{{ $list->name }}</td> <td> <button href="#" data-id="{{ $list->id }}" class="btn btn-outline-secondary" type="button" onclick="deletePost(this);">削除</button> </td> </tr> @endforeach @else <tr><td>ありません</td></tr> @endif </tbody>
これは、td内の$list->idが読めないので、data-idが取得できないのです。
上記のJSと組み合わせると「本当に削除しますか?」は出るけれど、Submitされないので、削除できない。
これをこのように書くとSubmitされて削除できるようになります。O
<tbody> @if(count($company) > 0) @foreach ($company as $list) <tr> <td>{{ $list->id }}</td> <td>{{ $list->code }}</td> <td>{{ $list->name }}</td> <td> <form action="{{ route('company_del', ['id'=>$list->id]) }}" id="form_{{ $list->id }}" method="post"> @csrf <button href="#" data-id="{{ $list->id }}" class="btn btn-outline-secondary" type="button" onclick="deletePost(this);">削除</button> </form> </td> </tr> @endforeach @else <tr><td>ありません</td></tr> @endif </tbody>
td内にformを入れ込む。
知っている人は当たり前なのかも知れないけれど、私は初めてでした。