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

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

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

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

JavaScript

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

jQuery

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

HTML

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

Q&A

解決済

2回答

3032閲覧

チェック済みチェックボックスの数をカウントしたい。

think_tan

総合スコア1

checkbox

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

JavaScript

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

jQuery

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

HTML

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

0グッド

0クリップ

投稿2020/08/01 13:00

編集2020/08/01 13:12

前提・実現したいこと

以下の画像のように、テーブルの各項目に設置してあるチェックボックスをチェック済みのものだけカウントしたいのですが、列ごとにカウントする方法が思い浮かびません。
(必要人数の項目の左の数字がカウントされている数です)

現状
イメージ説明

実現したいこと
イメージ説明

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

今の状況ですと、列ごとに分類できておらず、どの列のチェックボックスをチェックしてもすべての列においてカウントが反映されてしまいます。(すべての列で同じカウント数になってしまう)

該当のソースコード

javascript

1$(function() { 2 $('input:checkbox').change(function() { 3 var cnt = $('input:checkbox:checked').length; 4 $('span.count_check1').text(cnt); 5 }).trigger('change'); 6}); 7$(function() { 8 $('input:checkbox').change(function() { 9 var cnt = $('input:checkbox:checked').length; 10 $('span.count_check2').text(cnt); 11 }).trigger('change'); 12}); 13$(function() { 14 $('input:checkbox').change(function() { 15 var cnt = $('input:checkbox:checked').length; 16 $('span.count_check3').text(cnt); 17 }).trigger('change'); 18}); 19$(function() { 20 $('input:checkbox').change(function() { 21 var cnt = $('input:checkbox:checked').length; 22 $('span.count_check4').text(cnt); 23 }).trigger('change'); 24});

html

1<table> 2 <tr> 3 <th>必要人数</th> 4 <td><span class="count_check1"></span>/5</td> 5 <td><span class="count_check2"></span>/3</td> 6 <td><span class="count_check3"></span>/4</td> 7 <td><span class="count_check4"></span>/3</td> 8 </tr> 9 <tr> 10 <th>佐藤花子</th> 11 <td><input type="checkbox" name="riyu" value="1"></td> 12 <td><input type="checkbox" name="riyu" value="2"></td> 13 <td><input type="checkbox" name="riyu" value="3"></td> 14 <td><input type="checkbox" name="riyu" value="4"></td> 15 </tr> 16 17 <tr> 18 <th>山田太郎</th> 19 <td><input type="checkbox" name="riyu" value="1"></td> 20 <td><input type="checkbox" name="riyu" value="2"></td> 21 <td><input type="checkbox" name="riyu" value="3"></td> 22 <td><input type="checkbox" name="riyu" value="4"></td> 23 </tr> 24 <tr> 25 <th>鈴木一郎</th> 26 <td><input type="checkbox" name="riyu" value="1"></td> 27 <td><input type="checkbox" name="riyu" value="2"></td> 28 <td><input type="checkbox" name="riyu" value="3"></td> 29 <td><input type="checkbox" name="riyu" value="4"></td> 30 </tr> 313233343536</table>

試したこと

列1,2,3,4に対応するデータごとにidを付けてJQueryで数えるチェックボックスの対象をそのIDのチェックボックスにした。

javascript

1$(function() { 2 $('input:checkbox').change(function() { 3 var cnt = $('#check1 input:checkbox:checked').length; 4 $('span.count_check1').text(cnt); 5 }).trigger('change'); 6}); 7$(function() { 8 $('input:checkbox').change(function() { 9 var cnt = $('#check2 input:checkbox:checked').length; 10 $('span.count_check').text(cnt); 11 }).trigger('change'); 12}); 13$(function() { 14 $('input:checkbox').change(function() { 15 var cnt = $('#check3 input:checkbox:checked').length; 16 $('span.count_check1').text(cnt); 17 }).trigger('change'); 18}); 19$(function() { 20 $('input:checkbox').change(function() { 21 var cnt = $('#check4 input:checkbox:checked').length; 22 $('span.count_check1').text(cnt); 23 }).trigger('change'); 24});

html

1<tr> 2 <th>佐藤花子</th> 3 <td id="check1"><input type="checkbox" name="riyu" value="1"></td> 4 <td id="check2"><input type="checkbox" name="riyu" value="2"></td> 5 <td id="check3"><input type="checkbox" name="riyu" value="3"></td> 6 <td id="check4"><input type="checkbox" name="riyu" value="4"></td> 7</tr> 8<tr> 9 <th>山田太郎</th> 10 <td id="check1"><input type="checkbox" name="riyu" value="1"></td> 11 <td id="check2"><input type="checkbox" name="riyu" value="2"></td> 12 <td id="check3"><input type="checkbox" name="riyu" value="3"></td> 13 <td id="check4"><input type="checkbox" name="riyu" value="4"></td> 14</tr> 15

この方法だと列ごとの一番最初のチェックボックスしかカウントされませんでした。

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

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

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

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

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

guest

回答2

0

Vanillaの例

js

1const table = document.getElementsByTagName('table')[0]; 2table.querySelectorAll('[type="checkbox"]').forEach(chkbox => { 3 chkbox.addEventListener('change', evt => { 4 // 操作されたチェックボックスの親要素 (td) が何列目か 5 const index = evt.currentTarget.parentNode.cellIndex; 6 7 // 対応する列のヘッダー (th) 8 const th = table.rows[0].cells[index]; 9 10 // ヘッダーの textContent を書き換える 11 // split('/') の配列の各要素 (初期値は ['', '3']) を処理する 12 th.textContent = th.textContent.split('/').map((str, idx) => { 13 // 分母に対しては何もしない 14 if(idx !== 0) return str; 15 16 // チェックボックスが操作された結果、チェックされた状態なのかどうか 17 const checked = evt.currentTarget.checked; 18 19 // 文字列が空のときは、チェック状態なら1, そうでないなら0を返す 20 if(!str.length) return checked? 1 : 0; 21 22 // チェック状態なら+1, そうでないなら-1した値を返す 23 return parseInt(str, 10) + (checked? 1 : -1); 24 }).join('/'); 25 }); 26});

投稿2020/08/02 00:53

thyda.eiqau

総合スコア2982

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

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

think_tan

2020/08/02 03:11

コメント付きでとても理解しやすかったです!! こんな方法もあったのですね、本当にありがとうございます。
thyda.eiqau

2020/08/02 04:38

yambejpさんの回答に対するコメントを拝見しました。以下はそのコメントに対するコメントです。 (yambejpさんの回答に対するコメントではないので、こちらに書きます) 何をやっているのかいまいち理解できていないものをコピペして動かそうという考え方は大変危険なので、理解できていないものは使わずに、勉強して理解できるようになってから使うようにしてください。
guest

0

ベストアンサー

命題自体の意図を理解できていなかもしれませんがこんな感じでしょうか?

javascript

1<script> 2$(function(){ 3 $(':checkbox').on('change',function(){ 4 var idx=$(this).closest('tr').find(':checkbox').index(this); 5 var len=$('tr').filter(function(){ 6 return $(this).find(':checkbox:eq('+idx+')').is(':checked'); 7 }).length; 8 $(this).closest('table').find('tr:eq(0) span:eq('+idx+')').text(len); 9 }).filter(':lt(4)').trigger('change'); 10}); 11</script> 12 13 14<table> 15<tr> 16<th>必要人数</th> 17<td><span></span>/5</td> 18<td><span></span>/3</td> 19<td><span></span>/4</td> 20<td><span></span>/3</td> 21</tr> 22<tr> 23<th>佐藤花子</th> 24<td><input type="checkbox"></td> 25<td><input type="checkbox"></td> 26<td><input type="checkbox"></td> 27<td><input type="checkbox"></td> 28</tr> 29<tr> 30<th>山田太郎</th> 31<td><input type="checkbox"></td> 32<td><input type="checkbox"></td> 33<td><input type="checkbox"></td> 34<td><input type="checkbox"></td> 35</tr> 36<tr> 37<th>鈴木一郎</th> 38<td><input type="checkbox"></td> 39<td><input type="checkbox"></td> 40<td><input type="checkbox"></td> 41<td><input type="checkbox"></td> 42</tr> 43</table>

投稿2020/08/01 15:32

yambejp

総合スコア114812

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

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

think_tan

2020/08/02 03:08

この通り記述したら出来ました。当方JQueryには全然詳しくないので何をやっているのかいまいち理解でていませんが、助かりました! 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問