• ベストアンサー

100個のチェックボックスの任意区間を一括チェックしたい[JavaScript]

百人一首を覚えるCGIの設定フォームを作ってます。 100個のチェックボックスを作ったのですが、それだと任意区間(例えば23番~55番の歌)を出題したい場合にチェック作業が多くなります。 そこで任意の連続した番号のスタートの番号とエンドの番号をチェックしたらその区間をJavaScriptで一括チェックできるように各100個ずつのチェックボックス(もしくはラジオ)を用意したいです。 どのようなスクリプトを用意すれば一括チェックできるようになりますか? ちなみにチェックボックスは現在 <input type="checkbox" name="number94" value="1"> のようになっています。idはついていません。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

当方がやるなら以下の感じですかね。 入力された値が妥当な数字であるか、などのチェック機構は必要ですがそこは端折ります。 idがないとjavascriptで扱うのは難しいので適当につけると良いです。 <input type="button" value="go" onclick="on()" /> <input type="checkbox" name="number1" id="number1" />1 <input type="checkbox" name="number2" id="number2" />2 <input type="checkbox" name="number3" id="number3" />3 ... <script type='text/javascript'><!-- function on() {  begin = prompt('開始位置','');  end = prompt('終了位置','');  for(ii=begin;ii<=end;ii++)  {   document.getElementById('number' + ii).checked = true;  } }

waffle8765
質問者

お礼

No.4さんのフォローで正常に動きました。ありがとうございました!

waffle8765
質問者

補足

ありがとうございます。試してみました。 私が当初考えていた操作とは違うのですが、チェックボックスを増やさなくて済むので 非常に見た目がコンパクトで操作しやすいですね。 逆に自分の考えよりも使い勝手がいいと感じました。 現在1つ問題点があります。 ケタが違う区間を指定した場合うまく動きません。 例えば4→7,35→45は動作しますが、4→14,45→100では動きません。 例外的に最初が1だとケタが違っても動くようです。 他のスクリプト(上の句,下の句を一括チェックするスクリプトを入れてあります) を削除しても現象が起きるので干渉している訳ではないと思うのですが。 どうなんでしょうか?

その他の回答 (3)

  • Dumper
  • ベストアンサー率28% (24/84)
回答No.4

#2さんの関数をちょっとだけいじりました function on() {  begin = parseInt( prompt('開始位置','') );  end = parseInt( prompt('終了位置','') );  for( ii=Math.min(begin, end); ii<=Math.max(begin, end); ii++)  {   document.getElementById('number' + ii).checked = true;  } }

waffle8765
質問者

お礼

ありがとうございました。 正常に動きました。助かりました!

  • da-te
  • ベストアンサー率37% (3/8)
回答No.3

こんばんは。 動的に処理させてみました。 チェックを付けたボックス間を全てチェックさせます。 <input type="checkbox" name="number94" value="1" onClick="calc( this );"> <input type="checkbox" name="number95" value="1" onClick="calc( this );"> <input type="checkbox" name="number96" value="1" onClick="calc( this );"> <input type="checkbox" name="number97" value="1" onClick="calc( this );"> <input type="checkbox" name="number98" value="1" onClick="calc( this );"> <input type="checkbox" name="number99" value="1" onClick="calc( this );"> : : <script language="javascript"><!-- // チェックされているボックスの数 var checkBoxCount = 0; // チェック開始位置 var num_start = 0; // チェック終了位置 var num_end = 0; // name区の共通文字列 var name_str = "number"; // チェックボックスのname区の数字を取得 // obj:クリックしたボックスのエレメント function calc( obj ){ // チェックを付けた時 if( obj.checked == true ){ // チェック開始位置 if( checkBoxCount == 0 ){ num_start = obj.name.substring( name_str.length ); // チェック終了位置 }else if( checkBoxCount == 1 ){ num_end = obj.name.substring( name_str.length ); // チェック開始位置の数字 < チェック終了位置の数字にする if( num_start > num_end ){ var tmp = num_start; num_start = num_end; num_end = tmp; } // チェック開始位置からチェック終了位置までのチェックボックスにチェックを付ける checking( num_start, num_end ); } checkBoxCount++; // チェックを外した時 }else{ checkBoxCount--; } window.status=checkBoxCount; } // チェック開始位置からチェック終了位置までのチェックボックスにチェックを付ける // num_s;チェック開始位置 // num_e:チェック終了位置 function checking( num_s, num_e ){ // 既にチェックが付いているボックスは処理しない while( num_s < num_e - 1 ){ num_s++; document.getElementsByName( name_str + num_s )[0].checked = true; checkBoxCount++; } } //--> </script> ちょっと長めのコードですが、こんな感じでいかがでしょうか。

waffle8765
質問者

お礼

ありがとうございました。試してみました。 私の考えていたものにかなり近くて感動しました。 ただNo.2の方のやり方がキーボードに数字を打ち込むめんどくささはあるものの、 見た目のシンプルさ、スクリプトを再実行できる点から No.2の方のスクリプトを実装することになると思います。 せっかく力作を教授いただいたのに大変申し訳ありません。 あとNo.2の方と同じでケタが違う区間はうまく動いてくれませんでした…。

回答No.1

idは <label for="number1"><input>チェックボックス1</label> でも使えるので、nameとは別につけておいた方が良いと思います。 (クリックできる範囲が広がるだけですが) nameが同じなら これで23から55はチェックをつけ、それ以外は全てチェックを外せます。 <input type="checkbox" name="number94" id="number1" value="1"> <input type="checkbox" name="number94" id="number2" value="2"> <input type="checkbox" name="number94" id="number3" value="3"> <script> var nums=document.getElementsByName('number94'); for(var i=0;i<nums.length;i++){ nums[i].checked=(23<=i && i<=55); } </script>

waffle8765
質問者

補足

早速の教授ありがとうございます。 残念ながらnameにはそれぞれの歌の番号を入れないといけないです。 というのもvalueは 0がチェック選択しない 1がチェック選択したが未出題 2がチェック選択して既出題 を意味します。 チェックした歌のvalueは最初は未出題なので1で、出題されると2に変更されます。 チェックした歌全てのvalueが1でなくなる(未出題の歌がなくなる)と 出題終了→2を全て1に戻す→同設定で再出題しますか?→また出題してvalueを2に変更する という流れになっています。 もちろんCGI側でうまく処理すればできなくはないですが複雑になると思うので、 できればnameとvalueは変えずidだけをうまく使ったスクリプトを探しています。 説明不足でお手数をおかけして申し訳ありません。

関連するQ&A

  • JavaScriptにて、2つのチェックボックスのチェックができません

    お世話になっております。 お分かりになる方いらっしゃいましたら、ご教授願えますでしょうか? 現在採用に関する応募フォームを作成しています。 JavaScriptにてフォーム内のチェックボックスに チェックが入っているか、必須チェックをさせたいと思っています。 テキストボックスやコンボボックスなど、いくつか必須チェックがある中で、 チェックボックスの項目についての必須チェックがうまくいきません。 チェック完了後、cgiにてメールを送信するようにしているのですが、 チェックがされず、メールを送信してしまいます。 ローカルで行ってみたのですが、チェックをスルーして、 cgiに遷移してしまいます。 フォームイメージは以下の感じです。 <応募フォーム> --------------------------- 希望勤務地:□本社 □大阪 --------------------------- 2つのチェックボックスどちらにもチェックが入っていない場合は、 エラーメッセージを出し、処理を中止します。 どちらのチェックボックスにもチェックが入っていても、 エラーは出さずにcgiへ遷移します。 以下は現在のコードの内容です。 <HTMLコード> <form method="POST" action="send.cgi" name="応募フォーム" onSubmit="return check()"> <input type="checkbox" name="希望勤務地" value="本社" checked>本社 <input type="checkbox" name="希望勤務地" value="大阪">大阪 <input type="submit" value=" 送信 "> <input type="reset" value=" 取消 "> <Scriptコード> function check(){ if(!document.応募フォーム.希望勤務地.value.checked){ flag = 1; window.alert('必須項目[希望勤務地]にチェックがされていません'); } } 色々試してみたのですが、うまくいきませんでした。 チェックボックスのnameを同じ名前にしているのが原因でしょうか? お手数ですが、宜しくお願いいたします。

  • AJAXで生成したHTMLでのチェックボックス一括チェックの方法を教えてください

    現在jqueryを使って、ajaxでチェックボックスを生成して、それに対して一括チェックボタンを付けたいと考えております。 <input name="allcheck" type="checkbox" id="checkall" checked="checked" />全て<br /> <input type="checkbox" name="carrier" value="docomo" checked="checked" />docomo<br /> <input type="checkbox" name="carrier" value="au" checked="checked" />au<br /> <input type="checkbox" name="carrier" value="softbank" checked="checked" />softbank<br /> というチェックボックスがajaxで生成されて function carrier_check() { $('#checkall').click(function(e){ $(':checkbox[type=checkbox][name=carrier]').attr('checked', $('#checkall').attr('checked')); }); } のjavascriptで上記のチェックボックスを一括チェックできるようにしようとしているのですが ajaxを使わずに上記のチェックボックスをHTMLに書いているときは一括チェックできるのですが、ajaxを使用して生成した場合にはチェックボックスの一括チェックができません。 どのようにすれば、ajaxで生成されたチェックボックスを一括チェックできるようになるのでしょうか? ご存知の方がいらっしゃいましたらご教授お願いいたします。

  • チェックボックスをチェックする

    <input id="checkbox1" type="checkbox">AAA というチェックボックスがあります。これをチェックして、チェックした状態にHTMLを書き換えたいのですが、JavaScriptでできますか?

  • チェックボックスで画像を一括表示

    下記サイトを参照して、 「チェックボックスのON / OFFで画像を表示する」 「全てのチェックボックスのON / OFFを切り替える」 を組み合わせて、 「全てのチェックボックスのON / OFFを切り替えて画像の一括表示」をしたいのですが、全てのチェックボックスのON / OFFの切り替えはできるのですが、それに伴って画像の表示・非表示までは反応しませんでした。各チェックボックスのON / OFFでの画像の表示・非表示は可能です。 http://iswebmag.hp.infoseek.co.jp/sample163.html http://iswebmag.hp.infoseek.co.jp/sample164.html ▼htmlソースです。 <FORM name="f1"> <INPUT type=checkbox name="f1" onClick="show(0,'img01')">朝焼に輝く星<BR> <INPUT type=checkbox name="f1" onClick="show(1,'img02')">木立の隙間から<BR> <INPUT type=checkbox name="f1" onClick="show(2,'img03')">夜明け<BR> <INPUT type=checkbox name="f1" onClick="show(3,'img04')">自転を感じる<BR> <INPUT type=checkbox name="f1" onClick="show(4,'img05')">昼の星空<BR> <INPUT type=checkbox name="f1" onClick="show(5,'img06')">砂丘の月<BR> <INPUT type=checkbox name="f1" onClick="show(6,'img07')">月の軌跡<BR> <INPUT type=checkbox name="f1" onClick="show(7,'img08')">彗星の飛来<BR> <INPUT type=checkbox name="f1" onClick="show(8,'img09')">彗星 <BR> <INPUT type=button value="全てOn" onClick="all_on(this.form.f1)"> <INPUT type=button value="全てOff" onClick="all_off(this.form.f1)"> </FORM> ▼チェックボックスのON / OFFで画像を表示するJavaScript <SCRIPT language="JavaScript"> <!-- function show(c,img){ if(document.f1.elements[c].checked == true){ document.getElementById(img).style.width=200; } else { document.getElementById(img).style.width=0; } } // --> </SCRIPT> ▼全てのチェックボックスのON / OFFを切り替えるJavaScript <SCRIPT language="JavaScript"> <!-- function all_on(chk){ for (i = 0; i < chk.length; i++) { chk[i].checked = true; } } function all_off(chk){ for (i = 0; i < chk.length; i++) { chk[i].checked = false; } } // --> </SCRIPT>

  • チェックボックスのjavascriptについて

    javascript初心者です! お力をお借りしたいと思い質問いたしました。 宜しくお願い致します。 ●やりたい事 ・チェックボックスがチェックされてない時に「商品を選択して下さい」のアラートを表示させ、1つでもチェックされていた場合は「送信」できる設定を行いたいです。 「name= 」 部分を同じ名前にすると可能ですが、異なる名前にすると動作いたしません。 どうかご教授お願い致します。 ■javascript部分 <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (!theform.category1[0].checked && !theform.category2[1].checked && !theform.category3[2].checked && !theform.category4[3].checked && !theform.category5[4].checked) { alert("商品を選択してください。"); }else{ FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> ■HTML部分 <form name="theform" onsubmit="return CheckForm(this);" action="" method="post"> <input value="category1" name="category1" type="checkbox">category1<br> <input value="category2" name="category2" type="checkbox">category2<br> <input value="category3" name="category3" type="checkbox">category3<br> <input value="category4" name="category4" type="checkbox">category4<br> <input value="category5" name="category5" type="checkbox">category5<br><br> <br> <br> <input value="送信" name="submit" type="submit"></form> 宜しくお願い致します。

  • JavaScriptとチェックボックスで画像の切替

    今月に入りJavaScriptの勉強を始めましたところ、 チェックボックスを使った画像の切り替えができなくて困っています。 具体的にはチェックボックスをチェックしたら画像を切り替えさせたいだけなのですが 対象画像一つに対してチェックボックスで切り替えることはできました。 しかし複数の画像にIDを割り当てて各々に対応するチェックボックスを クリックすると画像を切り替えることができません。 勿論各々の画像毎に関数を追加していけば切り替えはできるのですが 一つの関数ですっきり収めたいのです。 作成したコードは以下に記しておきます。 どうかよろしくお願いいたします。 <script type="text/javascript"> function sample(imageID,checkbox) { if (checkbox.checked) { document.getElementById(imageID).src = "on.png"; } else { document.getElementById(imageID).src = "on.png"; } } </script> <img src="off.png" id="test1" alt="" /> <img src="off.png" id="test2" alt="" /> <form> <input type="checkbox" onClick ="sample(test1','this')" /> <input type="checkbox" onClick ="sample(test2','this')" /> </form>

  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか

  • 複数あるチェックボックスの入力チェックするには?

    チェックボックスの入力チェックスクリプトを探しており、下記のようなスクリプトをネット検索で見つけました。 <!-- <script type="text/javascript"> function chNull(msg,obj) { if(!obj) return true; if((obj.type || obj[0].type) == 'checkbox'){ var flag = 0; if(obj.length){ for(var i=0; i<obj.length; i++) { if(obj[i].checked) flag = 1; } } else { if(obj.checked) flag = 1; } if(flag == 0) { alert(msg + 'を選択してください。'); return false; } } return true; } --> </script> <form method="POST" action="■.cgi" onSubmit="return chNull('チェックボックス',a);"> <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 </form> 同じnameのチェックボックス群がひとつしかないときはこれで問題ないのですが、 下記のようにnameが複数ある場合にはこのスクリプトのどの部分を変えればよいのでしょうか? <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 <input type="checkbox" name="b" value="B1" />B1 <input type="checkbox" name="b" value="B2" />B2 <input type="checkbox" name="c" value="C1" />C1 <input type="checkbox" name="c" value="C2" />C2 できればこのスクリプトをベースとして使用したいと思っています。どなたかお分かりの方がいらっしゃいましたらお教え下さいませ。 よろしくお願い致します。

  • javascriptでチェックボックスの選択状況をチェックする方法につ

    javascriptでチェックボックスの選択状況をチェックする方法について質問です。 チェックボックスを <input type="checkbox" name="chk[]" value="1"> <input type="checkbox" name="chk[]" value="2"> のようにした場合、チェックボックスが1か所以上選択されているかどうかは、 var count = 0; for (var i=0;i<document.myform.elements['chk[]'].length;i++){ if(document.myform.elements['chk[]'][i].checked){ count++; } } if(count==0){ window.alert("チェックしてください!"); } のようにすればチェック可能ですが、inputタグで <input type="checkbox" name="chk1[]" value="1"> <input type="checkbox" name="chk1[]" value="2"> <input type="checkbox" name="chk2[]" value="A"> <input type="checkbox" name="chk2[]" value="B"> のように「name」の配列名が変化する場合はどのようにすればチェック可能でしょうか?

  • チェックボックスのON/OFFに応じて別の複数のチェックボックスも連動ON/OFF

    7番のcheckboxをON→1,2,4,5番にチェックもON 7番のcheckboxをOFF→1,2,4,5番にチェックもOFF という風に動作させる記述をご教示ください。 よろしくお願い致します。 <html> <head> <script type="text/javascript"> </script> </head> <body> <form action="" method="post" name="myform"> 去年<br> 1番<input type="checkbox" name="kyonen[]" value="1">1月<br> 2番<input type="checkbox" name="kyonen[]" value="2">2月<br> 3番<input type="checkbox" name="kyonen[]" value="3">3月<br> 今年<br> 4番<input type="checkbox" name="kotosi[]" value="1">1月<br> 5番<input type="checkbox" name="kotosi[]" value="2">2月<br> 6番<input type="checkbox" name="kotosi[]" value="3">3月<br> 7番<input type="checkbox" name="mychk">去年と今年の1、2月をまとめてチェック<br> </form> </body> </html>

専門家に質問してみよう