チェックボックスの入力チェックとデータ転送について

このQ&Aのポイント
  • チェックボックスの入力チェックやデータの転送について、親ウィンドウと子ウィンドウの関係で説明します。
  • 子ウィンドウでのチェックボックスの選択状態を親ウィンドウに伝える方法を考えます。
  • チェックボックスの数だけ確認スクリプトを作成し、チェックされている場合は親ウィンドウのセルに表示させることが効果的です。さらに、別のセルにも情報を表示させる方法も調べましょう。
回答を見る
  • ベストアンサー

チェックボックスの入力チェックとデータの転送について

質問させてください. ちょっとわかりにくいかもしれないのですが、 ・親ウィンドウ(A.html)と子ウィンドウ(B.html)があります。 ・子ウィンドウではチェックボックスを使って選択するページです。チェックは複数選択するときもあります。 ・チェックをつけたチェックボックスの”value”を親ウィンドウのセル(td id=ma1)に表示させる。 ということをやりたいと思っています。 その場合に、 まず、子ウィンドウで、チェックボックスがチェックされているか確認するScriptは、チェックボックスの数だけつくって、チェックされていたらひとつづつ親ウィンドウのセルに表示させていくのがいいのでしょうか? また、二つ目のvalueの情報を、違うセル(td id=ma2)に表示させる場合はどうすればいいのでしょうか? もし、もっと違う効率的なやり方があったら教えていただきたいと思い質問させていただきました。

  • totis
  • お礼率47% (43/90)

質問者が選んだベストアンサー

  • ベストアンサー
  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.4

wolfwoodです。 表内のフォームの書き方ですが複数に分けなくても良いです。 例) <TABLE border=1> <FORM name="form_1"> <TR> <TD><INPUT type="checkbox" name="ck1" value="data1" onClick="test(1)"></TD> <TD>1*****</TD> </TR> <TR> <TD><INPUT type="checkbox" name="ck2" value="data2" onClick="test(2)"></TD> <TD>2*****</TD> </TR> <TR> <TD><INPUT type="checkbox" name="ck3" value="data3" onClick="test(3)"></TD> <TD>3*****</TD> </TR> <TR> <TD><INPUT type="checkbox" name="ck4" value="data4" onClick="test(4)"></TD> <TD>4*****</TD> </TR> </FORM> </TABLE> こんな感じです。 フォームまで分けてしまうと記述も面倒ですから。 一つのフォームオブジェクトの中の複数のチェックボックスの部品を扱う(コントロールする)感じでやるとイメージしやすいですしね。 FORMタグは<FORM>~</FORM>で囲まれた部分を一つのオブジェクトとして扱います。 その間にある部品(ボタン、テキストボックスなど)を扱うときのグループ枠みたいなものですね。 間に他のタグ(テーブルなど)があっても基本的に関係ありません。 (全く無い訳ではないです。配置次第で表示が微妙に変わったり、フォームの入れ子は出来ないとかあります) HPビルダーとかお使いですか? ビルダー系によくあることですが、フォーム部品(<INPUT>など)を配置するたびにFORMタグを付けてしまいソースの見栄えが悪くなります。 整理すると結構すっきりしますよ。 どうしても、フォームを分けたい場合は スクリプト内のフォーム名も動的に変えていけば良いです。 例) eval("document.form"+num+".ck"+num+".checked") こんな感じです。

totis
質問者

お礼

たびたびご親切に解説していただきありがとうございます.とぉってもわかりやすくて、感激して泣けてきます。 ほんとわかりました。 ありがとうございます。 また、ご迷惑をおかけするかもしれませんがよろしくお願いいたします。

その他の回答 (3)

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.3

wolfwoodです。 動きませんか・・・? こちらではIE5.5を使って確認済みです。 最初のスクリプトは動いていますよね? 何かしらエラーが出ていませんか? 例のスクリプトを以前のものと組み合わせる時はselの値を2にしてください。 注意する部分としてはセルの数の設定を親ウィンドウのセル(id)の数に合わせるというところです。 例えば、<TD id="ma1">~<TD id="ma10">まであったらスクリプトのselの設定を10にしてください。 あと、エラーが出ていたら教えてください。

totis
質問者

お礼

wolfwood 様御礼が遅くなり申し訳ありません。 ご親切にいろいろありがとうございました. あと、1つだけ質問があるのですが、(厚かましくてすみません。)表の中にチェックボックスを入れると<Form>がたくさんできますよね。 <form name="form1" method="post" action=""> <td height="20" width="42" align="center" bgcolor="#FFFFFF"> <input type="checkbox" name="checkbox1" value="checkbox" onClick="chktest(1)"> </td> </form> <td width="231" bgcolor="#CCFFFF">キシロカインショック</td> <td width="10"></td> </tr> <tr> <form name="form2" method="post" action=""> <td height="20" width="42" align="center"> <input type="checkbox" name="checkbox2" value="checkbox" onClick="chktest(2)"> </td> </form> <td width="231">抗リン剤禁</td> <td width="10"></td> </tr> <tr> <form name="form3" method="post" action=""> <td height="20" width="42" align="center" bgcolor="#FFFFFF"> <input type="checkbox" name="checkbox3" value="checkbox" onClick="chktest(3)"> </td> </form> 見たいな感じですよね。 このコードで質問させていただいたようなことをやるのには、フォームとにすべて(num)とできるように数字で書いていけばOKなのでしょうか? すみませんたびたび勉強不足で、本とご迷惑をおかけいたしてます.

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.2

wolfwoodです。 チェックされた順番にセルに入れるのは簡単ですが、 外された場合はそのセルが空いてしまいます。 外された場合順番を詰めて再表示するような処理にしてみました。 配列を使ってちょっと面倒なスクリプトですが・・・。 配列処理のあたりはもっと簡単に出来るかもしれません。 例)子ウィンドウのスクリプト部分 <SCRIPT> var aa = new Array;//チェックされた値を入れる配列 var bb = new Array;//配列の順番を詰めるための配列 var sel = 3;//セルの数 function test(num){ //チェックされた時 if(eval("document.form_1.ck"+num+".checked")){ for(j=1;j<=sel;j++){ //空いている配列に値を入れ処理を抜ける if(aa[j] == undefined){ aa[j] = eval("document.form_1.ck"+num+".value"); break; } } //チェックを外された時 }else{ for(f=1;f<=sel;f++){ //外された値の入った配列を空にする if(aa[f] == eval("document.form_1.ck"+num+".value")){ aa[f] = undefined; } } } //新しい配列に値を順番に詰め込む var s = 1; for(c=1;c<=sel;c++){ if(aa[c]){ bb[s] = aa[c]; s++; } } //新しい配列の残りを空にする while(s<=sel){ bb[s] = undefined; s++; } //セルに挿入し、元の配列に値を入れ直す for(n=1;n<=sel;n++){ if(bb[n]){ window.opener.eval("ma"+n).innerHTML = bb[n]; aa[n] = bb[n]; }else{ window.opener.eval("ma"+n).innerHTML = " "; aa[n] = bb[n]; } } } </SCRIPT>

totis
質問者

補足

早速詳しく教えていただきありがとうございます。ただ、最初に教えていただいたHTML&Javascriptにあとから教えていただいた配列のJavascriptを貼り付けてみたのですが、動作が何も起きません。 私が、勉強不足でどこででなくなっているのかがちょっとわからなくて、wolfwood様に本当にご迷惑尾おかけいたしまして申し訳ないのですが、なにとぞ、教えていただけると幸いです。 よろしくお願いいたします。また私も、勉強してさがしてみます。

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.1

eval関数をつかって動的にidやnameを生成すれば一つの関数で出来ると思います。 下記の例は値を表示するセルとチェックボックスが対になっている設定です。 例) 親ウィンドウのテーブル記述 <table border="1"> <tr> <td id="ma1" width="30"> </td> <td id="ma2" width="30"> </td> </tr> </table> 子ウィンドウ <HTML> <HEAD> <SCRIPT> function test(num){ if(eval("document.form_1.ck"+num+".checked")){ window.opener.eval("ma"+num).innerHTML= eval("document.form_1.ck"+num+".value"); }else{ window.opener.eval("ma"+num).innerHTML= " "; } } </SCRIPT> </HEAD> <BODY> <FORM name="form_1"> <INPUT type="checkbox" name="ck1" value="data1" onClick="test(1)">data1 <INPUT type="checkbox" name="ck2" value="data2" onClick="test(2)">data2 </FORM> </BODY> </HTML>

totis
質問者

補足

wolfwood様さっそく教えていただき感激です。ありがとうございます。 ごめんなさいもし、できたらもうひとつ教えていただきたいのですが、チェックがついているものを親ウィンドウのセルに表示させるときに、例えば、チェックボックスが10個有り、そのうちの飛び飛びでチェックされていて、4つがチェックされているときに、親ウィンドウのセルの表示を、一番最初に表示したセルから続けて表示させるということってできるのでしょうか?もし、できたら大変お手数ですが、教えていただけないでしょうか? いろいろ教えていただいているのにあつかましくてすみません。

関連するQ&A

  • チェックボックスの未入力チェック

    ざっとですけれども <form action="**" name="myform" onsubmit="return Check()" method=post> <input type="checkbox" name="Erasedata" id="Erasedata" value="1" > <input type="checkbox" name="Erasedata" id="Erasedata" value="2" > ・・・ <input type="checkbox" name="Erasedata" id="Erasedata" value="5" > <input type="submit" value="選択されたものを削除する"> このようなチェックボックスがあったとして function Check() { for (i=0;i<document.myform.length;i++)  {   if(document.myform.Erasedata[i].checked==true) {return true;}  } alert("どこかにチェックを入れて下さい "); return false; } といった感じで未入力チェックをしています。 チェックボックスが複数の場合はうまく動くのですが、チェックボックスがひとつだとうまくいきません。スクリプトで何か問題があるようでしたらご指摘お願いできませんでしょうか。よろしくお願いいたします。

  • チェックボックスの全選択・全解除を一つにまとめたい

    http://shoyu-ramen23.jugem.jp/?eid=184を参考にチェックボックスの全選択・全解除をつけました。 ただし、上記のサンプルは全選択ボタン、全解除ボタンと二つに分かれている為、これを一つにしたいと思ったのですが、どうすればできるかわからなかったので、 アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 【やりたい事】 1. 最初は「全て選択」ボタンのみ表示したいです。 2. 「全て選択」ボタンをクリックすると、「全て選択」ボタンが消え、代わりに「全て解除」ボタンを表示したいです(1回目,3回目,5回目・・・のクリックはこの動作)。 2. 「全て解除」ボタンをクリックすると、「全て解除」ボタンが消え、代わりに「全て選択」ボタンを表示したいです(2回目,4回目,6回目・・・のクリックはこの動作)。 【ソースコード】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>タイトル</title> <script type="text/javascript"> function allcheck(targetForm,flag){ for(n=0;n<=targetForm.length-1;n++){ if(targetForm.elements[n].type == "checkbox"){ targetForm.elements[n].checked = flag; } } } </script> </head> <body> <form action="test.php" method="post"> <table> <tr> <td> <input type="button" onclick="allcheck(this.form,true)" value="全て選択"><br /> <input type="button" onclick="allcheck(this.form,false)" value="全て解除"></td> </tr> <tr> <td><input type="checkbox" value="1" id="check1" name="data[check1]"></td> </tr> <tr> <td><input type="checkbox" value="1" id="check2" name="data[check2]"></td> </tr> <tr> <td><input type="checkbox" value="1" id="check3" name="data[check3]"></td> </tr> <tr> <td><input type="checkbox" value="1" id="check4" name="data[check4]"></td> </tr> <tr> <td><input type="checkbox" value="1" id="check5" name="data[check5]"></td> </tr> </table> </form> </body> </html> 以上、よろしくお願いします。

  • チェックボックスの値を表示したい

    チェックボックスの値が1のときチェックボックスにチェックが入っているようにしたいです。 データはこんな感じです。 1,1020,2006/9/14,E,1 最後の1がチェックボックスの値です。 上記のデータは@txtに格納しています。 foreach (@txt) { ($rec_id, $tonum, $c_date, $c_status, $chkbox) = split(/,/, $_); $name = &num_to_name($tonum); $html .= "<tr><td>$rec_id</td><td>$tonum</td><td>$name</td><td>$c_date</td><td>$c_status</td><td><input type=checkbox name=chkbox value=\"$chkbox\"></td></tr>"; } htmlとして出力してもチェックボックスにチェックが入っていません。 valueにはやはりcheckedみたいに入れないと入らないのでしょうか? ちなみにこの1はチェックボックスにチェックを入れ、書き込みしたら1が保存されました。なので、valueが1ならばチェックされると思ったのですが・・・。

    • ベストアンサー
    • Perl
  • チェックボックスとラジオボタンの連動について

    □親メニュー1 □親メニュー2 ◎子メニュー1 ◎子メニュー2 ◎子メニュー3 上記のように、親のチェックボックスが2つあり、 どちらか一方をチェック、または両方チェックを入れると、 子のラジオボタンが選択可能になるようにしたいのですが Javascriptの書き方が分かりません。 <input type="checkbox" name="親メニュー" id="id01" value="親メニュー1"> 親メニュー1 <input type="checkbox" name="親メニュー" id="id02" value="親メニュー2"> 親メニュー2 <input type="radio" name="子メニュー" id="id03" value="子メニュー1"> 子メニュー1 <input type="radio" name="子メニュー" id="id04" value="子メニュー2"> 子メニュー2 <input type="radio" name="子メニュー" id="id05" value="子メニュー3"> 子メニュー3 また条件が一つあり 上記のようにname属性に日本語が含まれて、nemeが同じなので チェック有無がID属性か、別の要素で確認が出来るようにしたいのですが どのようにすれば出来るのかお教え頂けないでしょうか。

  • JavaScript チェックボックスで指定の箇所をチェックする方法

    初めての投稿ですが、よろしくお願いします。m(_ _)m 現在下記ソースの様なチェックボックスで出来たテーブルフォームを作成しております。 一覧表の行or列の先頭にあるチェックボックスを選択すると 選択された行or列にあるチェックボックスを全てチェックされ、 先頭のチェックボックスを外すと全て解除される。 (例:横A□チェックボックスを選択すると右にある全てのチェックボックスが選択される。チェックを外すと右にある全てのチェックボックスが未選択になる。) という事を行いたいと思い、色々調べてみたのですが、 発見できませんでしたので質問させていただきました。 どうかお助けください。m(>_<)m -- <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE></TITLE> </HEAD> <BODY> <form name="F1"> <table border="1"> <tr> <td>一覧</td> <td>縦A<br><input type="checkbox" id="" /></td> <td>縦B<br><input type="checkbox" id="" /></td> <td>縦C<br><input type="checkbox" id="" /></td> </tr> <tr> <td>横A<input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> </tr> <tr> <td>横B<input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> </tr> <tr> <td>横C<input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> <td><input type="checkbox" id="" /></td> </tr> </table> </form> </BODY> </HTML>

  • チェックボックス複数選択 mysql受け渡し

    PHPを習いはじめたのですが分からない所がありましたので質問をさせて頂きました。 チェックボックスを作り複数選択されたデータをMYSQLに受け渡したいのですがどうしてもうまくいきません。受け渡しが出来たかと思えばARRAYのみ表示されてしまい、重要な内容が一切表示されません。 こちらがスクリプトになります。 <tr> <td>(チェックボックス)<br />順番不問</td> <td> <span class="checkbox"><input name="check1[]" type="checkbox" value="aaa" />aaa</span> <span class="checkbox"><input name="check1[]" type="checkbox" value="bbb" />bbb</span> </tr> </td> //mysql $sql = "insert into table values('$check1')"; 多分この$sql分のなにかが間違ってると思うですがいくらやっても 出来ません、、 mysql の設定はカラムはcheck1となっており、text, 値はnullとなっております。 どのなたか複数チェックボックスで表示された項目をMYSQLのデータベースに移行できる方法をご存知の方お伺い出来ませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テーブル行のクリックでチェックボックスの制御

    テーブル行をクリックしたときにその行にあるチェックボックスのON/OFFを 制御したいと思います。 Jqueryで以下サンプルを作成してみました。該当行をクリックするとチェックボックスが ONになったりOFFになったりするのですがチェックボックス自体をクリックするとうまく チェックがONになりません。恐らくチェックボックスをクリックした時はONになっていて、 同時に行をクリックしたとみなされONになっているチェックボックスをOFFにしているのでは ないかと思われます。 チェックボックスをクリックしてもON/OFFがうまくいくようにするためにはどうすればよろしいでしょうか 【サンプル】 <html> <head> <meta charset="UTF-8" /> <script type="text/javascript" src="../jquery-1.6.1.min.js"></script> <script type="text/javascript"> $(function(){ $("#nameTable tr").click(function() { //alert($(data).find(":checkbox").val()); var chk = $(this).find(":checkbox"); if(chk.prop("checked")) { chk.attr("checked", false); } else { chk.attr("checked", true); } }); }); </script> <title>CSS</title> <style type="text/css"> </style> </head> <body bgcolor="rgba(255,0,0,0.15)"> <table id="nameTable" border="1"> <tr><th>名前</th><th>チェックボックス</th></tr> <tr><td>あいうえお</td><td><input type="checkbox" value="1"></td></tr> <tr><td>かきくけこ</td><td><input type="checkbox" value="2"></td></tr> <tr><td>さしすせそ</td><td><input type="checkbox" value="3"></td></tr> <tr><td>たちつてと</td><td><input type="checkbox" value="4"></td></tr> <tr><td>なにぬねの</td><td><input type="checkbox" value="5"></td></tr> </table> </body> </html>

  • チェックボックスとの連動

    白黒とカラーの項目を連動させています。例えば白黒のチェックをはずしてカラーにチェックを入れるとすでに白黒で選択してた場合、金額が合計に加算されてしまいます。チェックをはずした時点で選択項目の金額をリセットさせたいのですが解決方法が見つかりません。Javascript勉強中で正直よくわかっていません。下記スクリプトもあっちこっち調べながら組み合わせたものです。解決策をいただけると助かります。よろしくお願い致します。 <script language="javascript"> <!-- n_table1 = new Array(0,100,200); n_table2 = new Array(0,300,400); function keisan(obj) { var outStr=""; var total=0; total = total + n_table1[document.form1.koumoku1.selectedIndex] * document.form1.kazu1.value; total = total + n_table2[document.form1.koumoku2.selectedIndex] * document.form1.kazu1.value; outStr = total; document.form1.goukei.value=eval(outStr); } function ctrl_check01(check02_checked) { document.getElementsByName("idcheck2")[0].disabled = check02_checked; document.getElementsByName("koumoku2")[0].disabled = check02_checked; } function ctrl_check03(check04_checked) { document.getElementsByName("idcheck")[0].disabled = check04_checked; document.getElementsByName("koumoku1")[0].disabled = check04_checked; } // --> </script> <form name="form1" METHOD="POST"> <table cellspacing="0" cellpadding="8" border="1" bordercolor="#666"> <tr> <td>白黒</td> <td><input type=checkbox name="idcheck" id="idcheck" onClick="ctrl_check01(this.checked);"> 白黒 <select name="koumoku1"> <option>選択 <option>--------------A(100) <option>--------------B(200) </select> </tr> <tr> <td>カラー</td> <td><input type=checkbox name="idcheck2" id="idcheck2" onClick="ctrl_check03(this.checked);"> カラー <select name="koumoku2"> <option>選択 <option>--------------A(300) <option>--------------B(400) </select></td> </tr> <tr> <td colspan="2"></td> </tr> <tr> <td>総枚数</td> <td><input type="text" name="kazu1" size="8" maxlength="12" value="0"> 枚</td> </tr> <tr> <td colspan="2"></td> </tr> <tr> <td>合計</td> <td><input type="text" name="goukei" size="8" maxlength="12" value="0"> 円</td> </tr> </table> <input type="button" value="計算する" onClick="keisan(this.form)"> </form>

  • テーブル内のチェックボックスを、全て選択、全て解除 したい

    以下のような、フォームの中にあるテーブル内のチェックボックスを一括して選択、解除したいのですが、どのように書けば良いのかが分かりません。 <form name="form1"> <table> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="1">項目(1)</td> </tr> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="2">項目(2)</td> </tr> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="3">項目(3)</td> </tr> </table> </form> ↓これは自分で試したプログラムですが、うまく動きませんでした。 <SCRIPT TYPE="text/javascript"> <!-- var count; function BoxChecked(check){ for(count = 0; count < document.form1.array[].length; count++){ document.form1.array[][count].checked = check; } } //--> </SCRIPT> <INPUT TYPE="button" onClick="BoxChecked(true);" VALUE="全て選択"> <INPUT TYPE="button" onClick="BoxChecked(false);" VALUE="全て未選択"> ↓ここに載っているのを色々変更してみたのですが上手くいきませんでした。 http://www5e.biglobe.ne.jp/~access_r/hp/javascript/js_072.html よろしくお願いします。

  • スクリプト内でチェックボックスを書き込みたい。

    プログラミング初心者です。 スクリプトを使って、セルの中にチェックボックス100個を生成したいのですが、どのようにやればよいのかわかりません。 セルにIDを指定して document.getElementById("ID名").innerText= <input type="checkbox" name="check">; としようと思ったのですが、うまくいきませんでした。 もしよろしければ、ぜひお答えいただきたいです。 よろしくおねがいします。

専門家に質問してみよう