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

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

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

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

jQuery

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

HTML

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

Q&A

解決済

1回答

690閲覧

JS(またはjquery)で、チェックボックス一括チェックと金額の集計を同時に行いたい

pg_beginner

総合スコア11

JavaScript

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

jQuery

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

HTML

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

0グッド

0クリップ

投稿2019/05/10 09:31

jSにて、table内のチェックボックスを一括チェックと、解除機能と
チェックした金額を合計する機能を同時に実装したいのですが、
単体ごとは、動くのですが、統合しようとすると集計機能が動かない等で、
うまく実装することができません。
(一括チェック、チェック解除と合わせて、個別チェック時も集計機能が動くようにしたいです)

すべてチェックするのサンプルです
https://www.softel.co.jp/blogs/tech/archives/4346

チェック時、該当する金額を元に集計するサンプルです。
http://pstar.hatenablog.com/entry/2017/08/31/120000

以下のようなtable情報に実装したいです。
(name=multi_chk[] の中身は乱数と考えください。)

<table> <tr> <td><input type=checkbox name=multi_chk[ssqbsaae] value="true"></td> <td>200</td> </tr> <tr> <td><input type=checkbox name=multi_chk[xxyyexee] value="true"></td> <td>400</td> </tr> </table>

JSは何分勉強不足のため、ご助力いただけれ幸いです。

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

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

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

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

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

yambejp

2019/05/10 09:39

なにをトリガーに全チェック・解除をするのか? 合計値を計算してどこに表示するのか? 最低限上記を追記ください
pg_beginner

2019/05/10 09:52

慣れないため、ご指摘ありがとうございます。 <!-- トリガーは、ボタンでも以下のようなチェックボックスでも大丈夫です。 --> <input type=checkbox name=all><br> <!-- 結果は、以下のようなテキストボックスに表示されると嬉しいです。 --> <input type=text name=anser_price><br> <!-- 以下は、そのままです。 --> <table> <tr> <td><input type=checkbox name=multi_chk[ssqbsaae] value="true"></td> <td>200</td> </tr> <tr> <td><input type=checkbox name=multi_chk[xxyyexee] value="true"></td> <td>400</td> </tr> </table>
guest

回答1

0

ベストアンサー

inputをいじるならformがあったほうが歯切れがいい
ざっくりこんな感じ

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 set_answer(); 4 document.querySelector('#f1 [name=all]').addEventListener('change',function(e){ 5 [].forEach.call(document.querySelectorAll('#f1 [name^=multi_chk]'),function(x){ 6 x.checked=e.target.checked; 7 }); 8 set_answer(); 9 }); 10 [].forEach.call(document.querySelectorAll('#f1 [name^=multi_chk]'),function(x){ 11 x.addEventListener('change',function(){ 12 set_answer(); 13 }); 14 }); 15 function set_answer(){ 16 var num=[].map.call(document.querySelectorAll('#f1 [name^=multi_chk]:checked'),function(x){ 17 return parseInt(x.closest("td").nextElementSibling.textContent); 18 }).concat(0).reduce(function(x,y){ 19 return x+y; 20 }); 21 document.querySelector('[name=anser_price]').value=num; 22 } 23}); 24</script> 25<form id="f1"> 26<table> 27<tr> 28<td><input type="checkbox" name="multi_chk[1]" value="true"></td> 29<td>200</td> 30</tr> 31<tr> 32<td><input type="checkbox" name="multi_chk[2]" value="true"></td> 33<td>400</td> 34</tr> 35<tr> 36<td><input type="checkbox" name="multi_chk[3]" value="true"></td> 37<td>150</td> 38</tr> 39<tr> 40<td><input type="checkbox" name="multi_chk[4s]" value="true"></td> 41<td>300</td> 42</tr> 43</table> 44<label><input type="checkbox" name="all">all</label><br> 45<input type="text" name="anser_price"> 46</form> 47

jQuery

上記ソースをjQueryで書くとこう

javascript

1$(function(){ 2 $('#f1 [name=all],#f1 [name^=multi_chk]').on('change',function(){ 3 if($(this).attr('name')=="all") $('#f1 [name^=multi_chk]').prop('checked',$(this).prop('checked')); 4 var num=$('#f1 [name^=multi_chk]:checked').map(function(){ 5 return parseInt($(this).closest('td').next().text()); 6 }).get().concat(0).reduce(function(x,y){ 7 return x+y; 8 }); 9 $('[name=anser_price]').val(num); 10 }).eq(0).trigger('change'); 11});

投稿2019/05/10 10:18

編集2019/05/10 10:28
yambejp

総合スコア114833

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

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

pg_beginner

2019/05/13 02:08

おお!実装することができました! ただ、一部説明が漏れていまして、tdが4つ程度あった場合、どのように編集すればよろしいでしょうか? ■現在■ <tr> <td><input type="checkbox" name="multi_chk[1]" value="true"></td> <td>200</td> </tr> ■こうなっている場合■ <tr> <td><input type="checkbox" name="multi_chk[1]" value="true"></td> <td>コメント1</td> <td>項目1</td> <td>200</td> </tr> 多分、ここを改修する気がするのですが。。。 return parseInt(x.closest("td").nextElementSibling.textContent);
yambejp

2019/05/13 02:24

javascript版であればtrの3番めの要素を指定して return parseInt(x.closest("tr").children[3].textContent); とか、次の次の次の要素を拾って return parseInt(x.closest("td").nextElementSibling.nextElementSibling.nextElementSibling.textContent); とか。 jQuery版であれば、後ろの兄弟の2番目で return parseInt($(this).closest('td').nextAll().eq(2).text());
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問