質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

6940閲覧

JavaScriptによるcheckboxの個数制限について

kuuuuuya

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/06/11 05:19

下記のHTMLで書いたチェックボックスの選択可能個数の上限を3こにするためのコードをjavaascriptで書いたのですが、機能しません。解決策をご存知の方いらっしゃいましたら教えていただきたいです。

javascript

1function click_cb(){ 2 //チェックカウント用変数 3 var check_count = 0; 4 5 // 箇所チェック数カウント 6 $(".group input").each(function(){ 7 var parent_checkbox = $(this).children(".group input"); 8 9 if(parent_checkbox.prop('checked')){ 10 check_count = check_count+1; 11 } 12 }); 13 14 // 0個のとき(チェックがすべて外れたとき) 15 16 // 3個以上の時(チェック可能上限数) 17 if(check_count > 2){ 18 $(".group input").each(function(){ 19 // チェックされていないチェックボックスをロックする 20 if(!$(this).children(".group input").prop('checked')){ 21 $(this).children(".group input").prop('disabled',true); 22 $(this).addClass("locked"); 23 } 24 }); 25 }else{ 26 $("..group input").each(function(){ 27 // チェックされていないチェックボックスを選択可能にする 28 if(!$(this).children(".group input").prop('checked')){ 29 $(this).children(".group input").prop('disabled',false); 30 $(this).removeClass("locked"); 31 } 32 }); 33 } 34 35 return false; 36} 37

HTML

1<div class= "group3"> 2 <table border="" width="840px" height="700"> 3 <tr><th colspan=6 height="10%">グループⅢ</th></tr> 4 <tr width="16%" height="10%"> 5 <th>A難度</th><th>B難度</th><th>C難度</th><th> 6 D難度</th><th>E難度</th><th>F難度</th> 7 </tr> 8 <tr align="center"> 9 <td> 10 <label><input type="checkbox" class="G3" value="0.1"  onclick = "click_cb();">前宙</label> 11 </td> 12 <td> 13 <label><input type="checkbox" class="G3" value="0.2" onclick = "click_cb();">前宙</label> 14 </td> 15 <td> 16 <label><input type="checkbox" class="G3" value="0.3" onclick = "click_cb();">前宙</label> 17 </td> 18 <td> 19 <label><input type="checkbox" class="G3" value="0.4" onclick = "click_cb();">前宙</label> 20 </td> 21 <td> 22 <label><input type="checkbox" class="G3" value="0.5" onclick = "click_cb();">前宙</label> 23 </td> 24 <td> 25 <label><input type="checkbox" class="G3" value="0.6" onclick = "click_cb();">前宙</label> 26 </td> 27 </tr> 28 <tr> 29 <td colspan="6" align="center"> 30 合計点:<span id="total_3">0</span>点 31 </td> 32 </tr> 33 </table> 34</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2019/06/11 06:12

HTML には class="group" がないのですが、どこにあるのでしょうか?
guest

回答2

0

javascript

1 $(".group input").each(function(){ 2 // チェックされていないチェックボックスをロックする 3 if(!$(this).children(".group input").prop('checked')){ 4 $(this).children(".group input").prop('disabled',true); 5 $(this).addClass("locked"); 6 } 7 });

このeachの中では、this1つ1つのチェックボックスになります。なので、$(this).children(".group input")と取るのではなく(inputの子要素はないので何も取れません)、単に$(this)とするのが適当ではないかと思います。

投稿2019/06/11 05:28

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuuuuya

2019/06/11 05:49

ご協力いただき誠にありがとうございます。ご指摘いただいた通り、下記のように$(this).children(".group input")を$(this)に変更してみたのですが個数制限がまだかかりませんでした。他に考えられる原因はありますでしょうか? function click_cb(){ //チェックカウント用変数 var check_count = 0; // 箇所チェック数カウント $(".group input").each(function(){ var parent_checkbox = $(this); if(parent_checkbox.prop('checked')){ check_count = check_count+1; } }); // 0個のとき(チェックがすべて外れたとき) // 3個以上の時(チェック可能上限数) if(check_count > 2){ $(".group input").each(function(){ // チェックされていないチェックボックスをロックする if(!$(this).prop('checked')){ $(this).prop('disabled',true); $(this).addClass("locked"); } }); }else{ $(".group input").each(function(){ // チェックされていないチェックボックスを選択可能にする if(!$(this).prop('checked')){ $(this).prop('disabled',false); $(this).removeClass("locked"); } }); } return false; }
guest

0

ベストアンサー

上限まで達したらdisabledを設定すればよいでしょう

javascript

1<script> 2var max_checked=3; 3$(function(){ 4 $('.group :checkbox').on('change',function(){ 5 var flg=$(this).closest('.group').find(':checkbox:checked').length>=max_checked; 6 $(this).closest('.group').find(':checkbox:not(:checked)').prop('disabled',flg); 7 }); 8}); 9</script> 10 11</script> 12<div class= "group"> 13<label><input type="checkbox" value="1" >1</label> 14<label><input type="checkbox" value="2" >2</label> 15<label><input type="checkbox" value="3" >3</label> 16<label><input type="checkbox" value="4" >4</label> 17<label><input type="checkbox" value="5" >5</label> 18<label><input type="checkbox" value="6" >6</label> 19</div> 20<div class= "group"> 21<label><input type="checkbox" value="1" >1</label> 22<label><input type="checkbox" value="2" >2</label> 23<label><input type="checkbox" value="3" >3</label> 24<label><input type="checkbox" value="4" >4</label> 25<label><input type="checkbox" value="5" >5</label> 26<label><input type="checkbox" value="6" >6</label> 27</div> 28

投稿2019/06/11 06:06

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問