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

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

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

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

13684閲覧

複数のチェックボックスと連動するボタン

momi

総合スコア40

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/01/25 10:21

編集2017/01/26 04:02

複数のチェックボックスを全て選択したときに押せるようになるボタンを作成したいです。
元々1つのチェックボックスで1つのボタンを制御するような仕様でしたが、
クライアントの希望で選択必須のチェックボックスが3つに増えました。
できれば現在のコードを元に修正したいのですが、どうすればよいでしょうか?

HTML

1<!--checkbox1--> 2 <input type="checkbox" name="name1" id="check1"><label for="check1">同意します-1</label> 3<!--checkbox2--> 4 <input type="checkbox" name="name2" id="check2"><label for="check2">同意します-2</label> 5<!--checkbox3--> 6 <input type="checkbox" name="name3" id="check3"><label for="check3">同意します-3</label> 7 8<button type="submit" id="btn">すべて同意して送信</button>

javascript

1$(function(){ 2 $("#check1").removeAttr("checked"); 3 $("#btn").attr("disabled", "disabled"); 4 $("#btn").addClass("inactive"); 5 $("#check1").click(function() { 6 if (this.checked) { 7 // チェックon時 8 $("#btn").removeAttr("disabled"); 9 $("#btn").removeClass("inactive"); 10 } else { 11 // チェックoff時 12 $("#btn").attr("disabled", "disabled"); 13 $("#btn").addClass("inactive"); 14 } 15 }); 16});

###補足
チェックoff時は.inactiveでボタンに半透明のスタイルをあてています。
ユーザビリティ的にもチェックのon/offでclassの付与はそのままにしたいです。

HTMLは必要と思われる個所だけ抜き出していますので、不足している記述などあればご指摘ください。
追記いたします。

###追記
tomohiro_obara様に貼っていただいたURLの方法応用したところ、うまくいきました。
(私のような方のために修正したコード記載いたします。)

html

1<div id="wrapper"> 2 <input type="checkbox" name="name1" id="check1" class="checkbox"><label for="check1">同意します-1</label> 3 <input type="checkbox" name="name2" id="check2" class="checkbox"><label for="check2">同意します-2</label> 4 <input type="checkbox" name="name3" id="check3" class="checkbox"><label for="check3">同意します-3</label> 5 6 <button type="submit" id="btn">すべて同意して送信</button> 7</div>
$(function(){ $('.checkbox').click(function(){ var check_count = $('#wrapper :checked').length; if (check_count == 3 ){ // チェックon時 $("#btn").removeAttr("disabled"); $("#btn").removeClass("inactive"); } else { // チェックoff時 $("#btn").attr("disabled", "disabled"); $("#btn").addClass("inactive"); } }); });

他お二方のご回答も勉強になりました。
皆さん早々にご回答いただき本当にありがとうございました。

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

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

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

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

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

guest

回答3

0

こんな感じでどうでしょうか?

javascript

1<script> 2$(function(){ 3 $("#check1,#check2,#check3").on('change',function(){ 4 $("#btn").prop('disabled',$("#check1,#check2,#check3").filter(':checked').length<3) 5 }).change(); 6}); 7</script> 8 9<input type="checkbox" name="name1" id="check1"><label for="check1">同意します-1</label> 10<input type="checkbox" name="name2" id="check2"><label for="check2">同意します-2</label> 11<input type="checkbox" name="name3" id="check3"><label for="check3">同意します-3</label> 12 13<button type="submit" id="btn">すべて同意して送信</button>

追記

classの処理もありましたね、ではこうで

<style> .inactive{ background-Color:red; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ $("#check1,#check2,#check3").on('change',function(){ var flg=$("#check1,#check2,#check3").filter(':checked').length<3; $("#btn") .prop('disabled',flg) .toggleClass('inactive',flg); }).change(); }); </script> <input type="checkbox" name="name1" id="check1"><label for="check1">同意します-1</label> <input type="checkbox" name="name2" id="check2"><label for="check2">同意します-2</label> <input type="checkbox" name="name3" id="check3"><label for="check3">同意します-3</label> <button type="submit" id="btn">すべて同意して送信</button>

投稿2017/01/25 10:40

編集2017/01/26 00:50
yambejp

総合スコア114775

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

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

momi

2017/01/26 03:41

yambejp様 試してみたのですが、理想していたようには動いてくれませんでした…せっかくご回答頂いたのにすみません。 ありがとうございました。
guest

0

とりあえず動いた。

JavaScript

1$( _=> { 2 var $_check = $( '[id^="check"]' ).prop( 'checked', false ); 3 var $_btn = $( '#btn' ).prop( 'disabled', true ).addClass( 'inactive' ); 4 $_check.click( _=> { 5 if ( $_check.length === $_check.filter( ':checked' ).length ) { 6 // チェックon時 7 $_btn.prop( 'disabled', false ).removeClass( 'inactive' ); 8 } else { 9 // チェックoff時 10 $_btn.prop( 'disabled', true ).addClass( 'inactive' ); 11 } 12 } ); 13} ); 14 15```**動くサンプル:**[https://jsfiddle.net/j5w2atvb/](https://jsfiddle.net/j5w2atvb/) 16 17--- 18 19【jQueryで全選択・全解除はprop使う - Qiita】 20[http://qiita.com/ituki_b/items/17eab8c38a2ad5392660](http://qiita.com/ituki_b/items/17eab8c38a2ad5392660) 21 22--- 23 24**追記:** 25 26少し改良。 27 28```JavaScript 29$( _=> { 30 const $_btn = $( '#btn' ), $_check = $( '[id^="check"]' ).prop( 'checked', false ); 31 $_check.on( 'change', _=> { 32 const ck = $_check.length === $_check.filter( ':checked' ).length; 33 $_btn.prop( 'disabled', !ck )[ ck ? 'removeClass' : 'addClass' ]( 'inactive' ); 34 } ).change(); 35} ); 36```**動くサンプル:**[https://jsfiddle.net/j5w2atvb/1/](https://jsfiddle.net/j5w2atvb/1/)

投稿2017/01/25 10:37

編集2017/01/25 11:07
kei344

総合スコア69400

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

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

namimon

2017/01/26 01:42

kei344様 横から失礼します。 _=> という記述ですが、()=>を短くするために、アンダースコアを引数として当てているというのはわかるのですが、 これってコーディング規約ではよくある記述方法なのでしょうか。
kei344

2017/01/26 02:43

> コーディング規約ではよくある記述方法なのでしょうか。 すみません、どこかのサイトの記述を見て「短いから」という理由で使用しています。Underscore.js など「_」に意味があるライブラリ等を使用する可能性がある場合は別文字か「()」を使うと思いますので、規模の大きな規約では推奨されないような気もします。
momi

2017/01/26 03:34

kei344様 デモのURLまで記載していただきありがとうございます。 試してみたのですがシンタックスエラーが出てしまったのと、constがIEでは使用できないようでして(環境について記載を忘れていました。すみません。)、今回は別の方のご回答を参考にさせて頂きました。 ありがとうございました。
kei344

2017/01/26 03:40

解決されたようでよかったです。 IE対応なら const を varにして「_=>」を「function()」にすれば動くと思いますよ。(IE11で確認済み) https://jsfiddle.net/j5w2atvb/2/
momi

2017/01/26 03:49

ありがとうございます。勉強になります。 今後のためにも試してみます!
guest

0

ベストアンサー

http://qiita.com/geshi/items/8af9b00f5959d0c512a1
この辺りを参考にどうぞ

投稿2017/01/25 10:32

t_obara

総合スコア5488

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

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

momi

2017/01/26 03:30

tomohiro_obara様 URL先の方法を応用したところ上手く動いてくれました! 超初心者の私でも理解できる内容で大変助かりました。 早々にご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問