• ベストアンサー

チェックボックスの取得数値で別のチェックボックスを選択可能に

こんにちは、初めて利用させていただきます。 Javascriptを利用し、下記URLのようなものを作成中です。 http://mag.morirepo.com/test_skill.html それぞれのテーブルごとに段階を設け、「次の段階に進むためには2ポイント以上消費しなければチェックボックスが表示されない」といったものにしたいのですが、上手くスクリプト書けませんでした。 FirefoxとIEで動作させたいと思っています。 よろしくお願いします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

(1)ご提示のソースの構成という条件で、<table>内の<input>要素は全て   チェックボックスであると仮定し、そのチェックは省略しています。 (2)同じ段階の項目はinputのname属性が同じであるということを利用して     判定しています。 (なので、ご提示の「至近距離技能」のところは   正しく動作しません。=全部同じnameになっている) (3)ソースの「onClick="ttlValue()"」と「disabled」の設定は繰り返しが   多いので、省略できるようにしました。   下のサンプルのようにすることが可能です。   (formに代表してonclickを設定しています。)   (オンロード時に、非表示とdisabledをセットするようにしています) (4)非表示にしてかつdisabledにするのかどうか不明でしたので(非表示   だけでもことたりるのか)、一応、disabledにもにしていますが、不要   ならばはずしてください。   また、非表示にした時にチェックされている内容をクリアするのか   どうかも不明でしたので、チェックはそのままです。クリアしたい   場合は、コメントアウトしてある部分を有効にしてください。 (5)クリックされたらttlValue()が続いて実行されるようになっていますが、   ttlValue()でやりたいことが良くわからなかったので、とりあえずダミー   のfunctionになっています。 function ttlValue() を置き換えれば   そのまま機能するはずです。   最後の<select>の「onChange="ttlValue()"」は省略できませんので、   そのまま残しておいてください。 以下、サンプルです。(短くするため、2項目のみに減らしてあります。) <html> <head> <script type="text/javascript"> window.onload = function() { var i, p = document.getElementById('tableBox').getElementsByTagName('TABLE'); for (i=0; i<p.length; i++) check(p[i]); } function test(evt) { var t = evt.target || evt.srcElement; if (t.nodeName != 'INPUT' || t.type != 'checkbox') return; var p = t.parentNode; while (p.nodeName != 'TABLE') p = p.parentNode; check(p); ttlValue(); } function check(p) { var n, c, i = 0, e = p.getElementsByTagName('INPUT'); while (e[i]) { n = e[i].name; c = 0; while (e[i] && e[i].name == n) { if (e[i].checked) c += parseInt(e[i].value); e[i].disabled = false; e[i++].style.visibility = 'visible'; } if (c<2) while (e[i]) { //e[i].checked = false; //一度消えたらチェックも消す場合 e[i].disabled = true; e[i++].style.visibility = 'hidden'; } } } function ttlValue() { return; } //←省略しています </script> </head> <body> <form name="skillForm" onclick="test(event)"> <div id="tableBox"> <p>( )内の数値は必要ポイントです。</p> <h3>防御技能</h3> <table cellspacing="0"> <tr> <td colspan="2" class="top left dankai">第1段階</td> <td colspan="2" class="top dankai">第2段階</td> <td colspan="2" class="top dankai">第3段階</td> <td class="top dankai">第4段階</td> </tr> <tr> <td class="left noLineUnder green">HGリロードタイム</td> <td class="noLineUnder green">切替速度</td> <td class="noLineUnder yellow2">PDW</td> <td class="noLineUnder green">連射タイム</td> <td class="noLineUnder yellow1">サイレンサー</td> <td class="noLineUnder green">振る速度向上</td> <td class="noLineUnder green">リーチ拡張</td> </tr> <tr> <td class="left chBox green"><i>(1)</i> <input name="bx2Lv1" type="checkbox" value="1" /></td> <td class="chBox green"><i>(1)</i> <input name="bx2Lv1" type="checkbox" value="1" /></td> <td class="chBox yellow2"><i>(3)</i> <input name="bx2Lv2" type="checkbox" value="3" /></td> <td class="chBox green"><i>(2)</i> <input name="bx2Lv2" type="checkbox" value="2" /></td> <td class="chBox yellow1"><i>(2)</i> <input name="bx2Lv3" type="checkbox" value="2" /></td> <td class="chBox green"><i>(2)</i> <input name="bx2Lv3" type="checkbox" value="2" /></td> <td class="chBox green"><i>(2)</i> <input name="bx2Lv4" type="checkbox" value="2" /></td> </tr> </table> <h3>身体技能</h3> <table cellspacing="0"> <tr> <td colspan="3" class="top left dankai">第1段階</td> <td colspan="3" class="top dankai">第2段階</td> <td colspan="2" class="top dankai">第3段階</td> <td class="top dankai">第4段階</td> </tr> <tr> <td class="left noLineUnder green">衝突抵抗度</td> <td class="noLineUnder green">探知力向上</td> <td class="noLineUnder green">ダッシュ回復力増加</td> <td class="noLineUnder green">上級空挺部隊</td> <td class="noLineUnder green">隠密性向上</td> <td class="noLineUnder green">持久力増加</td> <td class="noLineUnder green">科学攻撃抵抗度</td> <td class="noLineUnder green">爆発への抵抗</td> <td class="noLineUnder green">体力増加</td> </tr> <tr> <td class="left chBox green"><i>(1)</i> <input name="bx3Lv1" type="checkbox" value="1" /></td> <td class="chBox green"><i>(1)</i> <input name="bx3Lv1" type="checkbox" value="1" /></td> <td class="chBox green"><i>(1)</i> <input name="bx3Lv1" type="checkbox" value="1" /></td> <td class="chBox green"><i>(2)</i> <input name="bx3Lv2" type="checkbox" value="2" /></td> <td class="chBox green"><i>(2)</i> <input name="bx3Lv2" type="checkbox" value="2" /></td> <td class="chBox green"><i>(2)</i> <input name="bx3Lv2" type="checkbox" value="2" /></td> <td class="chBox green"><i>(4)</i> <input name="bx3Lv3" type="checkbox" value="4" /></td> <td class="chBox green"><i>(4)</i> <input name="bx3Lv3" type="checkbox" value="4" /></td> <td class="chBox green"><i>(5)</i> <input name="bx3Lv4" type="checkbox" value="5" /></td> </tr> </table> </div> <div id="LvPt"> Lv.<select name="ch2" onChange="ttlValue()"> <option value="1" selected>1</option> <option value="2">2</option> <!-- 以下省略 --> </select> 残り<INPUT name="result" type="text" value="1" size="3" id="result" /> pt </div> </form> </body> </html>

HIEN_jpn
質問者

お礼

ありがとうございます! ここまで書いていただけるとは思いませんでした。というか、間違いの指摘や、クリアしたい時の場合まで解説+追加していただき感激です。 自分が思っていたよりもだいぶ難しいスクリプトだったのがわかりました。 こんな綺麗なものが書けるように頑張りたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

基本はcheckboxを押すたびに再計算するってことだとおもいます。 ルールがよくわからなかったので、もう少し簡便な例示がよいかと

HIEN_jpn
質問者

補足

すみません、余計なものが多かったようですね。 どんな形で使いたいのかすべて見せたほうがわかりやすいかと思ったのですが。 簡略化したものをあげなおしました。 もとの形のものは下記にあります。よろしくお願いします。 http://mag.morirepo.com/test_skill_full.html

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • チェックボックスの値の取得

    初歩的なことがわかりません。 チェックボックスをクリックしたときに、そのチェックボックスの値(Value)を取得する方法をアドバイス下さい。 <SCRIPT language=JavaScript> function test() alert(★)←この辺をうまく書きたい。 </SCRIPT> <INPUT TYPE="CHECKBOX" NAME="mycheck" VALUE="玄関" onclick="test()">玄関<BR> <INPUT TYPE="CHECKBOX" NAME="mycheck" VALUE="トイレ" onclick="test()">トイレ<BR> 「玄関」をクリックすると「玄関です」とalert 「トイレ」をクリックすると「トイレです」とalert 他のチェックボックスにチェックが入っているかは無視。クリックしたチェックボックスのvalueをalert。 下記質問の作業の初めの段階でつまづいています。 (^^; http://www.okweb.ne.jp/kotaeru.php3?q=387758

  • チェックボックスONでジャンプ

    javascript初心者です。 現在チェックボックスをONにすると別の商品のページにジャンプするという シンプルなものを作っているのですが、Chromeではきちんと動作するのに、 その他のブラウザ(firefox opera ie)で動作しません。 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function chkClick() {  if (formTest.chkTest.checked) {   location.href="item123.html";  } } //--> </script> </head> <body> <form act="test.cgi" id="formTest" method="post"> <input type="checkbox" name="chkTest" value="1" onclick="chkClick()"> </form> チェックを入れると商品123のページへ </body> どこか記述が間違っているところがありますでしょうか? ご指摘頂ければ助かります。よろしくお願い致します。

  • 別window最大化javaがIE8だけエラー

    Javaがほぼ初心者なので、困っております。どなたか教えてください。 別windowを最大化で開くjavaとhtmlのソースが下記なのですが、FireFoxやCromeやIE10などは ちゃんと動作してくるのですが、IE8だけエラーが生じてしまいます。 エラーメッセージは「window.open("test.html","fullscreen=yes");」の引数が無効とのメッセージです。 IE8だと"fullscreen=yes"が使用できないのかなと思いましたが、どの引数を使用すればよいか不明です。IE8で動作するにはどうすればいいのでしょうか。 下記がJavaとhtmlのソースコードになります。 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ <script language="JavaScript"> <!-- function test() { window.open("test.html","fullscreen=yes"); } // --> </script> <a href="javaScript:test()">test</a> ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ 「IE4以降のようですが現状なら特に問題なさそうです。」と 記載あるので以下方法も試してみましたがダメでした。 http://hitoxu.com/095 ちなみに、IE8だけに動作してくれるjavaでもかまいません。

  • チェックボックスにチェックを入れるとシリアルが入る方法

    初歩的な質問かもしれませんが教えてください。 本テーブルのチェックボックスにチェックを入れると、 サブテーブルに新規レコードができて、 そのサブテーブルにあるシリアルフィールドにNOが入る という動作をスクリプトで組みたいのですがうまくいきません。 また、本テーブルのチェックボックスは作業完了後はずしますが、 サブテーブルのレコードはそのまま保存したいんです。 稚拙な文章で恐縮ですが、ご教授いただければ助かります。 よろしくお願いします。

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

    チェックボックスで以下のソースでは obj.length=[undefined] と表示されます。1という結果ではないのでしょうか? <script type="text/javascript"> <!-- function test(obj){ alert('obj.length=[' + obj.length + ']'); } // --> </script> <form name="test_form"> <input type="checkbox" name="chk" value="">チェック1 <input type="button" value="テスト" onClick="test(document.test_form.chk)"> </form>

    • ベストアンサー
    • HTML
  • チェックボックスのデザインが変わりません

    <script type="text/javascript" src="js/jquery.screwdefaultbuttonsV2.js"></script> と $('input:checkbox').screwDefaultButtons({ image: 'url("img/common/check_box.gif")', width: 20, height: 20 }); の組み合わせにより、お問い合わせフォームのチェックボックスを独自の画像に変えております。 自動フリガナ入力に対応するために、 prototype.js+autoKana.jsの組み合わせを記述すると、 チェックボックスから画像が外れ、普通のチェックボックスに変わります、 両方を共存させるためには、どうすればいいのでしょうか。

  • location href=""

    お世話になります 動作確認をしていてたのですが教えてください <script language="javascript"> <!-- function change(){ location.href="test1.html"; } /--> </script> <input type="button" value="送信" onclick="change()"> IE,Opera,Firefoxで試したのですが、Firefoxではページが切り替わりませんでした 何故でしょう?

  • リストボックスから選択できないのはどうして!?

    実はJAVASCRIPTでリストボックス(select1)から会社名を選択するとその下のテキストボックス(link)に そのURLがでるものを作っていたのですが、なぜかリストボックスが選択できない状態になってしまいます。 下のがそのコードなのですが、どなたかわかるかたいらっしゃいませんか? どうぞよろしくお願いいたします。 <SCRIPT type="text/javascript"> <!-- function aaa() { var a; if((f.select1.value) ="A社") {url = "http://www.a***.co.jp" }; else if((f.select1.value) ="B社") {url =" http://www.b***.co.jp" }; else if((f.select1.value) ="C社") {url = "http://www.c***.co.jp" }; else{url = "URLはありません"}; (f.link.value) = url; return } //--> </script> <select onchange = "aaa()" name="select1"> <option value="A社" selected>A社</option> <option value="B社">B社</option> <option value="C社">C社</option>      <option value="D社">D社</option> </select> <input type="text" name="link">

  • 複数あるチェックボックスからひとつだけ選択

    よろしくお願いします。 複数あるチェックボックスから常にひとつだけしか選択できないように したく、色々調べてみたところ、下記のようなスクリプトを見つけました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample</title> <script type="text/javascript"> var before = null; function test(e) { var tgt = e.srcElement ? e.srcElement: e.target; if (before == tgt && tgt.checkd == true) { tgt.checked = true; } else { var chks = document.getElementsByName('radiolike'); for (var i = 0; i < chks.length; i++) { if (chks[i] != tgt) chks[i].checked = false; } } before = tgt; } </script> </head> <body> <form id="SAMPLE" action="#" onclick="test(event);"> <label for="c1"><input name="radiolike" id="c1" type="checkbox" value="0">Item1</label> <label for="c2"><input name="radiolike" id="c2" type="checkbox" value="1">Item2</label> <label for="c3"><input name="radiolike" id="c3" type="checkbox" value="2">Item3</label> </form> </body> </html> 上記のチェックボックス群を同ページに複数置きたいときは、どのよう にスクリプトを変えたらよいのか分からずとても困っております。 分かりづらい説明で誠に申し訳ありません。 補足説明致しますので、どうかご教授下さいますようお願い致します。

  • Firefoxの検索ボックスが使えません

    Windows7 Pro(SR1)、Firefox 33.1.1です。 今まで使えていたのですが、急に動作がおかしくなりました。 Firefoxのスタートページの検索ボックスに文字をキー入力し、 検索ボタンをクリックしても、検索されることなく、文字が 入力前の状態に戻ってしまいます(文字が消えてしまいます)。 FirefoxのHelp→トラブルシューティング→ Firefox を初期状態にリセットする を実施しても、解消されませんでした。 検索バーを見ると検索エンジンは何も登録されていません。 IEからGoogleのページのURLをコピーして、FirefoxでURLに り付けると、FireFoxでのそのGoogleでは検索ボックスは 問題なく動作しました。 よろしくお願いします。

FAX to Eメール機能の安い機種は?
このQ&Aのポイント
  • FAX to Eメール機能のついた機種で、一番安いのはどれになりますでしょうか
  • お使いの環境について教えてください。パソコンもしくはスマートフォンのOSは何ですか?接続は有線LAN・無線LAN・USBケーブル・bluetoothのどれですか?関連するソフト・アプリはありますか?電話回線は何ですか?
  • ブラザー製品についてのFAX to Eメールに関する質問です。
回答を見る