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

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

新規登録して質問してみよう
ただいま回答率
85.46%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

jQuery

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

Q&A

解決済

2回答

2967閲覧

複数のinputに入力された数値の合計を出したい。

hase_

総合スコア14

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

jQuery

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

0グッド

0クリップ

投稿2020/04/25 16:01

画像のように複数のinputに入力された数値を「開始」ボタンを押すと合計が求められる仕組みをjQueryで作りたいです。イメージ説明
合計はとりあえずconsole.logで表示されれば大丈夫です。
初学者なので至らぬ点がありますがよろしくお願いします。

html

1<table id="member_list" class="table"> 2 <tbody> 3 <tr class="row"> 4 <th class="col-6 px-5">名前</th> 5 <th class="col-6 px-5">金額</th> 6 </tr> 7 <tr class="row"> 8 <td class="col-6 px-5">たなか</td> 9 <td class="col-6 px-5"><input class="en rounded border" type="number" name="price"></td> 10 </tr> 11 <tr class="row"> 12 <td class="col-6 px-5">たなか</td> 13 <td class="col-6 px-5"><input class="en rounded border" type="number" name="price"></td> 14 </tr> 15 <tr class="row"> 16 <td class="col-6 px-5">たなか</td> 17 <td class="col-6 px-5"><input class="en rounded border" type="number" name="price"></td> 18 </tr> 19 </tbody> 20</table> 21<div class="row text-center"> 22 <button id="begin" type="button" class="btn btn-secondary btn-lg col-8 mx-auto">開始</button> 23</div>

下記コードで試したが、sum = sum + num.value[i];の行で
Uncaught TypeError: Assignment to constant variable.
とエラー。

jQuery

1 $("#begin").on("click", function(){ 2 //メンバーの金額を取得して合計する 3 $(".en").each(function(index, num){ 4 $('.en').last().attr("id", "last"); 5 const elm = $("#last"); 6 const last = $(".en").index(elm); 7 const sum = 0; 8 for(let i = 0; i<=last+1; i++){ 9 console.log(num[1]); 10 sum = sum + num.value[i]; 11 console.log(sum); 12 }; 13 }); 14 }); 15}());

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

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

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

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

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

m.ts10806

2020/04/25 20:52

JavaScriptのコードの前半が足りてないと思います。 別のエラーが出てそもそも実行できません。
guest

回答2

0

既に出ている回答がシンプルで良いと思いますが、
ひとまず今の構成から要点を指摘しておきます。

js

1 $("#begin").on("click", function(){ 2 $(".en").each(function(index, num){ //eachだから全部回してます 3 $('.en').last().attr("id", "last"); 4 const elm = $("#last"); 5 const last = $(".en").index(elm); 6 const sum = 0; //全部回してるので毎回初期化される 7 for(let i = 0; i<=last+1; i++){ 8 console.log(num[1]); 9//undefinedになる 10 sum = sum + num.value[i]; 11//valueはそもそも配列ではないのでやるならnum[i].value []のつけどころ間違い 12//でもundefinedだからvalueは持ってない なぜならnum自体が1つの要素だから 13 console.log(sum); 14 }; 15 }); 16 });

ということで、eachでするか、forでするか、どちらかにしましょう。
eachは要素をループするものです。
forも繰り返し処理をするものです。

今回の場合は重ねる要件にはならないと思います。
もっと階層の深い構成になっていれば別ですが、1つしかないですからね。

あと$(".en").index(elm);の結果は「2」になるはずです。
ということはforの条件式であるlet i = 0; i<=last+1;は「0から3まで」回すことになります。ループ回数は4回ですね。
要素が複数ある場合、最初は0から始まり、今回入力する要素.enが振られているのは3つしかないので、途中でindex参照のエラーが出ると思います。


以上の点を踏まえ、調整してみてください。

投稿2020/04/25 21:02

m.ts10806

総合スコア80861

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

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

hase_

2020/04/26 14:42

コメントありがとうございます。 ご指摘いただいたところは私自身書き方が合っているのか不安だった箇所なので、おかげさまで不安を解消することができました。 また機会があればよろしくお願いします!
guest

0

ベストアンサー

こんにちは

一案としまして、以下のようにすると合計を得ることができます。

javascript

1const sum = $(".en").get().reduce((s, e) => +e.value + s, 0);

投稿2020/04/25 16:28

編集2020/04/25 22:50
jun68ykt

総合スコア9058

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

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

m.ts10806

2020/04/25 23:42

なんじゃろかこの低評価。
jun68ykt

2020/04/26 07:53

> 低評価 につきましては、回答に提示したコードに対するもの、というよりは、私の総合的な人格あるいは人徳、人間力といったモロモロの至らない点について厳しくも愛あるお叱りを頂戴したと認識しておりまして、低評価をお届けくださった方には感謝の念に堪えません。さらなる研鑽に励んでまいる所存でございます。
m.ts10806

2020/04/26 07:55

私以上に厳しめにやってる人ってそう多くないと思うので、そこまで私怨らしきものを受けるような人には見えません。 コード書くのが本当に好きなんだろうなぁ、書き方参考になるなぁと思いながら見てます。私は。
jun68ykt

2020/04/26 08:52

ありがとうございます! m.ts10806さんにそうおっしゃって頂けるとは、大変うれしいです。(^^)
hase_

2020/04/26 14:37

コメントありがとうございます! おかげさまで動作が確認できました! ご親切にわかりやすいURLも記載していただきありがとうございます。
jun68ykt

2020/04/26 14:40

@hase_さん どういたしまして???? > おかげさまで動作が確認できました! とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問