teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

回答を受けて現時点の結果を貼り付けました

2021/06/30 13:08

投稿

shiuri
shiuri

スコア2

title CHANGED
File without changes
body CHANGED
@@ -153,4 +153,31 @@
153
153
  });
154
154
  });
155
155
 
156
+ ```
157
+ ### **さらに追記 2つめの回答を受けて**
158
+ 素人考えでいじった結果となります。
159
+ お手数おかけしますがよろしくお願いいたします。
160
+ ```ここに言語を入力
161
+ $(document).ready(function(){
162
+ $('select').change(function() {
163
+
164
+ // 金額入力欄をquerySelectorAllでまとめて取ってくる
165
+
166
+ let priceList = document.querySelectorAll('.price');
167
+ priceList.forEach( e => {
168
+ // 各金額入力欄の対し、予めセットしている小計対象のname値を取得
169
+ let targetSyoukeiClass = e.dataset.syoukei;
170
+ // querySelectorで小計を加算するinputを特定
171
+ let targetSyoukeiInput = document.querySelector(`input[name=${targetSyoukeiClass}]`);
172
+ // 無事取得できたら、小計inputに金額を加算する
173
+
174
+ targetSyoukeiInput.value = 0;
175
+
176
+ if(targetSyoukeiInput){
177
+ targetSyoukeiInput.value = Number(targetSyoukeiInput.value) + Number(e.value);
178
+ }
179
+ });
180
+ });
181
+ });
182
+ コード
156
183
  ```

2

ご指摘を受けて改めてScriptを貼り付けしました。

2021/06/30 13:08

投稿

shiuri
shiuri

スコア2

title CHANGED
File without changes
body CHANGED
@@ -133,4 +133,24 @@
133
133
  });
134
134
  });
135
135
 
136
+ ```
137
+
138
+ ### **さらに追記 ご指摘を受けて**
139
+ ご指摘を受け変更したのですが、上手く動きませんでした。(合計値が出されなかった)
140
+ どこにミスがあるかご教示いただけますと幸いです。
141
+ ```Javascript
142
+ $(document).ready(function(){
143
+ $('select').change(function() {
144
+ var syoukei= document.querySelectorAll('[name^="syoukei"]');
145
+ for( i = 0; i < syoukei.length; i++ ) {
146
+ syoukei[ i ]=0;
147
+ $(".value"+i+" input:text").each(function(){
148
+ var value[ i ] = $(this).val();
149
+ syoukei[ i ] = parseInt(value[ i ])+syoukei[ i ];
150
+ });
151
+ document.form.syoukei[ i ].value = syoukei[ i ]; // 合計を表示
152
+ });
153
+ });
154
+ });
155
+
136
156
  ```

1

上手くいかない部分やHTMLの追記をいたしました。

2021/06/29 12:39

投稿

shiuri
shiuri

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,10 @@
1
1
  javascriptで計算フォームを作成しております。
2
- 複数あるvalueの合計がsyoukeiに出るようにしています。
2
+ 複数あるvalue(品物単価)の合計がsyoukeiに出るようにしています。
3
3
  forでまとめたいのですが、上手くいきません。
4
4
  初心者で恐縮ですが、ご教示のほどよろしくお願いいたします。
5
5
 
6
+ 追記 下記のjavascriptは綺麗に動いた例ですが、品物が増えるとその分追記しなくてはならないため、纏められないかと思いご質問させていただきました。
7
+
6
8
  ```javascript
7
9
  $(document).ready(function(){
8
10
  $('select').change(function() {
@@ -39,4 +41,96 @@
39
41
  document.form.syoukei2.value = syoukei2; // 合計を表示
40
42
  });
41
43
  });
44
+ ```
45
+ HTMLも追記いたします。
46
+ 他のscriptもありclassが乱立していますが、今回の質問では商品1~3横のinputに各商品の小計を入れることだけを目的としているためほかのscrptは記載はしておりません。必要であれば記載させていただきます。
47
+ ```HTML
48
+ <form method="post" name="form">
49
+ <table border="1">
50
+ <tr>
51
+ <th>詳細</th>
52
+ <th>単価</th>
53
+ <th>数量</th>
54
+ <th>金額</th>
55
+ </tr>
56
+
57
+ <tr class="title"><td colspan="4">商品1<input type="text" name="syoukei0" class="syoukeis" value="0" disabled></td></tr>
58
+ <tr class="rows">
59
+ <td></td>
60
+ <td class="tanka" >440円</td>
61
+ <td><select name="goods1">
62
+ <option value="0" selected>0</option>
63
+ <option value="1">1</option>
64
+ </select></td>
65
+ <td class="value0"><input type="text" class="price" size="7" value="0"> 円</td>
66
+ </tr>
67
+ <tr class="title"><td colspan="4">商品2<input type="text" name="syoukei1" class="syoukeis" value="0" disabled></td></tr>
68
+ <tr class="rows">
69
+ <td></td>
70
+ <td class="tanka" >440円</td>
71
+ <td><select name="goods2">
72
+ <option value="0" selected>0</option>
73
+ <option value="1">1</option>
74
+ </select></td>
75
+ <td class="value1"><input type="text" class="price" size="7" value="0"> 円</td>
76
+ </tr>
77
+
78
+ <tr class="title"><td colspan="4">商品3<input type="text" name="syoukei2" class="syoukeis" value="0" disabled></td></tr>
79
+ <tr class="rows">
80
+ <td><font color="red">キャラ1</font></td>
81
+ <td class="tanka">605円</td>
82
+ <td ><select name="goods3">
83
+ <option value="0" selected>0</option>
84
+ <option value="1">1</option>
85
+ </select></td>
86
+ <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td>
87
+ </tr>
88
+ <tr class="rows">
89
+ <td><font color="blue">キャラ2</font></td>
90
+ <td class="tanka" >605円</td>
91
+ <td ><select name="goods4">
92
+ <option value="0" selected>0</option>
93
+ <option value="1">1</option>
94
+ </select></td>
95
+ <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td>
96
+ </tr>
97
+ <tr class="rows">
98
+ <td><font color="yellow">キャラ3</font></td>
99
+ <td class="tanka" >605円</td>
100
+ <td ><select name="goods5">
101
+ <option value="0" selected>0</option>
102
+ <option value="1">1</option>
103
+ </select></td>
104
+ <td class="value2"><input type="text" class="price" size="7" value="0"> 円</td>
105
+ </tr>
106
+ <a name="top"></a>
107
+ <tr >
108
+ <td colspan="3" >
109
+ <button type="button" id="hide">0円を非表示</button>  合計</td>
110
+ <td><a name="top"></a><input type="text" id="total" size="7" value="0"> 円</td>
111
+ </tr>
112
+ <tr>
113
+ <td colspan="3" >特典</td>
114
+ <td><input type="text" id="tokuten" size="7" value="0"> 枚</td>
115
+ </tr>
116
+ </table>
117
+ ```
118
+
119
+ ### **追記 試したこと**
120
+ 見よう見まねでやろうとしましたが、上手く動かなかったのでご質問した次第でございます。
121
+ ```
122
+ $(document).ready(function(){
123
+ $('select').change(function() {
124
+ var syoukei= document.getElementsByName('[name^="syoukei"]').value;
125
+ for( i = 0; i < syoukei.length; i++ ) {
126
+ syoukei[ i ]=0;
127
+ $(".value[ i ] input:text").each(function(){
128
+ var value[ i ] = $(this).val();
129
+ syoukei[ i ] = parseInt(value[ i ])+syoukei[ i ];
130
+ });
131
+ document.form.syoukei[ i ].value = syoukei[ i ]; // 合計を表示
132
+ });
133
+ });
134
+ });
135
+
42
136
  ```