- ベストアンサー
オフになっているチェックボックスのデータ送信
フォームの値をPOSTで送信しているのですが、 チェックボックスの値はオンになっているもののみ送信されるのですよね。 データの受け側のプログラムに渡せなくて困っています。 (□はチェックボックスのつもりです、■はオンのつもりです) データ1:■ データ2:□ データ3:□ データ4:■ データ5:□ という画面から、 データ1=1 データ2=0 データ3=0 データ4=1 データ5=0 という風に全てのデータに対して配列で1つのパラメータとして渡したいのです。 Hiddenを使用しても、チェックボックス自体に名前が入っているので?POSTで一括送信すると、1つもチェックされなかった場合に、プログラム側で引数が不足していると認識されてダメでした。 チェックボックスに名前を付けずに、Hiddenの値を操作するなんて出来ないですよね・・・? またデータ送信前にオンかオフかチェックして、オフになっているもののValueを0に変更した上でチェックする、というのもやってみたのですが、history.backで戻った時に、全部オンになってしまうので、これもダメでした・・・ 何か良い方法をご存知の方がいらっしゃいましたら、よろしくお願いします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
受け側で処理するのが筋ですが... <form action="hoge.cgi" onsubmit=" this.data1.value=(this.elements[0].checked ? 1: 0); this.data2.value=(this.elements[1].checked ? 1: 0); "> <input type="checkbox"> <input type="checkbox" checked> <input type="hidden" name="data1"> <input type="hidden" name="data2"> <input type=submit> </form>
その他の回答 (1)
- you111111
- ベストアンサー率45% (20/44)
>全てのデータに対して配列で1つのパラメータとして渡したいのです。 どの様に値を渡そうとしているのかわからないのですが、とりあえず・・・ 配列に格納するなら以下の様なやり方では? <html> <head> <script language="javascript"> <!-- function Chk() { var i=0,j=0,ary = new Array(); for (i=0; i<document.all.length; i++) { if(document.all(i).type == "checkbox") { ary[j] = (document.all(i).checked) ? '1' : '0'; j++; } } //チェック用 for (i=0; i<ary.length; i++) alert(i + '個目:' + ary[i]); } //--> </script> </head> <body> <form name="frm" method="post" onsubmit="Chk();"> <input type="checkbox"> <input type="checkbox"> <input type="submit"> </form> </body> </html>
お礼
お返事が大変遅くなってしまって本当にすみません。 hiddenにするのではなく、Javascript内で変数に入れるのですね・・・実は違う方法でなんとか進めたのですが、この場合ですと、[ary]という変数はPOSTで渡らないですよね・・・? でも、こういう方法があること自体、自分では思いつきませんでした。 お返事、本当にありがとうございました。
お礼
お返事が大変遅れてしまって本当にすみません! 頂いたお返事を見て進めていくうちに遅くなりました。 名前がなくてもelementsで配列にすれば、hiddenへ値を入れることができるのですね。 お返事ありがとうございました。