- ベストアンサー
チェックボックスの送信についての問題と解決方法
- 昨日、Ajax通信で受け取ったデータをチェックボックスに反映する方法を教わった者です。しかし、チェックボックスの内容を送信する際に問題が発生しています。具体的には、チェックボックスの内容(チェックか否か)が拾われず、送信されないという問題です。エラーが表示されるため、解決方法を知りたいです。
- 以下のようなコードを使用しています。
- チェックボックスの内容が正しく拾われず、送信されないという問題が発生しています。解決方法をご教示いただけますと幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
いろいろ間違えていますが、そもそも HTML Form の使い方を勘違いしています HTML Form には、フォーム内容を簡単に扱える仕組みがあるので、それを利用しない手はありません。 https://developer.mozilla.org/ja/docs/Web/API/HTMLFormElement.elements たとえばこの様に <form onsubmit="doActionUpdate(this);return false"> ... <input type=hidden name="personId.0" value=123>123 <input type=checkbox name="sendF.0" checked> <input type=text name="memo.0" value=ほげ> ... <input type=hidden name="personId.1" value=456>456 <input type=checkbox name="sendF.1"> <input type=text name="memo.1" value=ふが> ... <input type=submit value=更新> </form> <script> function doActionUpdate(form) { var e = form.elements; // フォーム内の入力要素を name で取得 for (var i = 0; e['personId.' + i]; i++) { var personId = e['personId.' + i].value; var sendF = e['sendF.' + i].checked; var memo = e['memo.' + i].value; updateRecord(personId, sendF, memo); } } </script>
その他の回答 (1)
- Ogre7077
- ベストアンサー率65% (170/258)
誤: rows[i].cells[6].checked 可: rows[i].cells[2].firstChild.checked 誤: rows[i].getElementByTagName("sendF[]").checked 可: rows[i].getElementsByName("sendF[]").checked 正: document.getElementById('sendF[' + (i-1) + ']').checked 悪: id/name を無意味に指定している 良: スタイル/スクリプト/フォーム送信で使用するもの「だけ」指定する 悪: 入力要素の取得方法が、不必要に面倒 悪: 何のための id="sendF[' + i + ']" なのか... 良: getElementById / getElementsByName / form.elements で一発取得
お礼
Ogre7077 さん、返信が遅くなって申し訳ありません。 間違いの部分をいろいろ教えて頂き、ありがとうございました。 なんかずいぶん無駄で間違ったことをやっているんだなぁ、 と思いました。 教えて頂いたコードを元に何とかできるようになった感じなんですが・・ 今度はフォームをシリアライズして一度に複数件のデータを送った時、 PHP側でどのようにばらせばいいのかでつまづいています。 引き続きご指導下さい。
お礼
回答ありがとうございました。 なかなかJavascriptが理解できずに困っています。 Formで括ることはわかるんですが、この場合はテーブルに配置された データを登録するので行数は可変です。2行のときもあれば10行のときもあるわけですが、 その場合、1件についてFromでくくるんでしょうか。 submitがひとつであることを考えると、可変行を含めてすべての行を含んで Formで括ればいいわけですね。 例示して頂いた <input type=hidden name="personId.0" value=123>123 のところの「personId.0」を「personId.+ i」みたいな感じで回せばいいのかも しれませんね。 例示を参考にちょっと頑張ってみます。 「いろいろ間違えていますが」がとありますが、勉強のためでもありますので、 具体的に指摘して頂けるとうれしいです。 よろしくお願いします。
補足
教えて頂いたことを参考に、なんとか出来上がりました。 いろいろありがとうございました。