🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

1回答

526閲覧

チェックボックスにチェックを付けた際に同じくくりにされている数値を取得していく方法

tomato01

総合スコア82

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

0クリップ

投稿2019/09/12 14:42

宜しくお願い致します。

チェックボックスにチェックを付けた際に同じくくりにされている数値を取得し、チェックを付けた数に応じて数値を合計していく処理のやり方をJSで考えております。

■やりたいこと

下記のようなチェックボックスがならんでいた際に、チェックを付けた際に数値を足していき、合計値を画面移換なしで表示したいです。

□東京(5)

□大阪(8)

□福岡(9)

↑ 上記の場合は合計22を表示

■制限事項

・システムの関係上、checkboxのタグ内は手動で変更や追加ができない。
→class名を利用して数値を取得できないかと考えています。(参考タグは下記のコードをご覧ください。)

<li data-count="5"> <input type="checkbox" value="city2" name="city"> <label>東京<span class="count">(5)</span></label> </li> <li data-count="8"> <input type="checkbox" value="city3" name="city"> <label>大阪<span class="count">(8)</span></label> </li>

・チェックをつけた際にチェックボックスのvalueの値ではなく、同じくくりにあるclass="count"の値(5や8)をもってきたいとかんがえています。

■わからない点
・同じクラス名などの要素に囲まれた各ボックス内の値を取得し、合計を表示する処理
・チェックを付けたものだけ、上記の値を取得する処理

尚、現状で下記のようなイメージで考えていますが具体的な方法がまだわかっておりません。

<script type="text/javascript"> javascript:( function(){   //input:checkbox:checkedになった際に、処理をおこなう var elements = document.getElementsByClassName("count");    //innerHTMLなどで数値のみを取得し、足して表示する処理を行う } )(); </script>

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

1// type属性が"checkbox"のinput要素を取得しforEachでループ処理 2document.querySelectorAll('input[type="checkbox"]').forEach(elm => { 3 // "change"イベントのリスナを登録 4 elm.addEventListener("change", () => { 5 const total = [].reduce.call( 6 // チェック状態のinput要素を取得(画面内に処理に含みたくないチェックボックスやラジオボタン等がある場合は適宜セレクタを変更する等対処する) 7 document.querySelectorAll("input:checked"), 8 (sum, elm) => { 9 // 取得した要素の親要素を取得 10 const num = elm.parentNode 11 // 親要素の子のcountクラスを持つ要素を取得 12 .querySelector(".count") 13 // 要素の内容を取得し、数字以外を削除 14 .textContent.replace(/[^0-9]/g, ""); 15 // 上記で取得した数字を数値に変換して集計変数に加算 16 sum += parseInt(num); 17 return sum; 18 }, 19 0 20 ); 21 // とりあえず取得した合計値をコンソールに表示するだけ 22 console.log(total); 23 }); 24});

数値の集計に使用しているreduce関数については下記リンクを参照してください。
Array.prototype.reduce(MDN)

投稿2019/09/12 23:52

編集2019/09/17 00:42
ryo_y

総合スコア244

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

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

tomato01

2019/09/13 13:58

ご連絡が遅くなり申し訳ございませんでした。 教えて頂いたコードでまさに自分がやりたかったことが実現できました!ありがとうございます。 もし可能でしたら、簡単で良いので頂いたコードの解説をいただけましたら幸いでございます。 宜しくお願い致します。
tomato01

2019/09/14 02:37 編集

お世話になっております。 すみません、上記のコードで一部のページでは数値を取得できたのでですが、違うページで同じことをやったところ下記のエラーが出てカウントができませんでした。 Uncaught TypeError: Cannot read property 'textContent' of null at NodeList.reduce (<anonymous>) at HTMLInputElement.<anonymous> おそらくhtml内の違う要素から影響が出ている可能性が考えられます。 抽出範囲を絞ったり、他のコードから影響を受けないような記載方法はありますでしょうか。
ryo_y

2019/09/17 00:46 編集

回答を編集し、コードの簡単な解説をコメントで追加しました。 別のページでエラーになる件については、`reduce`内の数値取得処理を質問で提示されたHTMLのみの場合を前提として書いているため、querySelectorのセレクタ指定を工夫するなどして、処理に必要な要素のみを取得するようにしてみてください。
tomato01

2019/09/17 06:23

ご丁寧にコメントをつけて頂きありがとうございます! 自分でもさらに確認してみように致します。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問