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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

371閲覧

選択肢のチェックボックス解除で、全選択チェックボックスを解除したい

matsuhide

総合スコア1

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/16 01:10

前提・実現したいこと

以下の<初期状態>において、「選択1」~「選択3」いずれかのチェックを外した
場合に、「全て」のチェックが外れるようにしたい。
<初期状態> ☑全て | ☑選択1 ☑選択2 ☑選択3

発生している問題・エラーメッセージ

「選択1」のチェック外しでは「全て」のチェックが外れますが、「選択2」・「選択3」では、「全て」のチェックが外れません。
<設定1:選択1外し>  ☐全て | ☐選択1 ☑選択2 ☑選択3
・            ↑OK
<設定2:選択2外し>  ☑全て | ☑選択1 ☐選択2 ☑選択3
・            ↑NG
<設定3:選択3外し>  ☑全て | ☑選択1 ☑選択2 ☐選択3
・            ↑NG

該当のソースコード

<body> <div class="box"><span>    </span> <input type='checkbox' name='rooms' value=0 class='all' checked='checked' />全て |  <input type='checkbox' name='rooms' value=1 class='ind' checked='checked' />選択1 <input type='checkbox' name='rooms' value=2 class='ind' checked='checked' />選択2 <input type='checkbox' name='rooms' value=2 class='ind' checked='checked' />選択3 </div> <script> $(function() { $('.all').on('click', function() { $("input[name='rooms']").prop('checked', this.checked); }); $("input[name='rooms']").on('click', function() { if ($('.box: checked').length == $('.box: input').length) { $('.all').prop('checked', true);} else {$('.all').prop('checked', false);} }); }); $(function() { $("input[name='rooms']").change(function() { var prop = $('.ind').prop('checked'); if (!prop) {$('.all').prop('checked', false);} }); }); </script> </body>

試したこと

最初、選択肢の<input>タグ内で「id="ind"」、<script></script>内で「'#ind'」と記述していました。これが原因と思い、それぞれ「class="ind"」、「'.ind'」と変更してみましたが、改善に至っていません。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/16 01:30

コードを実行してみたのだけど、 1を押して外した後にもう一度押すと全部にチェックが入らないのは想定内でしょうか?
matsuhide

2021/03/16 02:21

「選択肢に再チェック」→「全てにチェックが入らない」は、想定内の動きになります。
K_3578

2021/03/16 02:54

誰も突っ込まないので突っ込んでおきますが、仮に解決したとしても質問文でのソースコードは MarkDownの<code>ブロックに貼り付けてください。 第三者が同様の問題にぶつかって本質問を見たときに見づらいので。
kei344

2021/03/16 05:30

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答4

0

ベストアンサー

js

1if ($('.box: checked').length == $('.box: input').length) {

この行のセレクタがおかしいのですが、これを '.box :checked''.box input' に修正しても期待どおりの動作ではないかと思います。

  • 変更後の値でなにかするときは、click ではなく change を使うべき
  • .all.ind があるのですから、両方対象になってしまう input[name='rooms'] は使うべきではない

以上を直すと以下のようになります。

js

1$(function() { 2 $('.all').change(function() { 3 $(".ind").prop('checked', this.checked); 4 }); 5 $(".ind").change(function() { 6 $('.all').prop('checked', $('.ind:checked').length == $('.ind').length); 7 }); 8});

投稿2021/03/16 01:44

編集2021/03/16 01:47
int32_t

総合スコア20872

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

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

matsuhide

2021/03/16 02:42

ご回答の内容で試行致しましたところ、所望の動作を確認できました。 初学者のため苦労しておりますが、 ご協力を頂きながら理解を深めていきます。 誠に有難う御座いました。
guest

0

javascript

1<script> 2$(function(){ 3 $('.all').on('change',function(){ 4 $(this).nextAll('.ind').prop('checked',$(this).prop('checked')); 5 }); 6 $('.ind').on('change',function(){ 7 $(this).prevAll('.all').prop('checked',$(this).closest('div').find('.ind:not(:checked)').length==0); 8 }); 9}); 10</script> 11<div> 12<input type='checkbox' name='rooms' value='0' class='all' checked='checked' />全て |  13<input type='checkbox' name='rooms' value='1' class='ind' checked='checked' />選択1 14<input type='checkbox' name='rooms' value='2' class='ind' checked='checked' />選択2 15<input type='checkbox' name='rooms' value='3' class='ind' checked='checked' />選択3 16</div> 17<div> 18<input type='checkbox' name='rooms' value='0' class='all' checked='checked' />全て |  19<input type='checkbox' name='rooms' value='1' class='ind' checked='checked' />選択1 20<input type='checkbox' name='rooms' value='2' class='ind' checked='checked' />選択2 21<input type='checkbox' name='rooms' value='3' class='ind' checked='checked' />選択3 22</div> 23

投稿2021/03/16 03:01

yambejp

総合スコア114829

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

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

0

以下のコードをchangeした要素であるthisに変えてやると質問の要件は満たせるかなぁ。

javascript

1//var prop = $('.ind').prop('checked'); 2var prop = $(this).prop('checked');

追記
一応、コードを変えたら手元の環境では質問の条件を満たしました。
他に変なところがあるみたいだけども…

投稿2021/03/16 01:35

編集2021/03/16 01:50
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

matsuhide

2021/03/16 02:50

誠に有難う御座います。 初学者のため苦労しております(^_^;)。 (this)への変更により、所望の動きを確認できました。 大変助かりました。
guest

0

実際動かしてみて、コンソールを確認してみてください。そしたらエラーの原因がわかるはずです。

.boxはdivタグなので、checkedというプロパティは持っていません。こういう場合は

$('.box').find('checkbox:checked')

こうやって子要素を呼び出します。

投稿2021/03/16 01:32

FKM

総合スコア3633

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

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

matsuhide

2021/03/16 02:47

誠に有難う御座います。 ご指摘の内容を試してみます。
FKM

2021/03/16 02:59

それで動くはずです。実際開発画面で動作確認してますので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問