- ベストアンサー
同一nameの input type="text" の合計を計算したい
初めて質問させて頂きます。 form 内で同じname名を付けられたテキストフィールドの値の合計を計算し、その値に定数を乗じた値を表示させたいのですが、出来ずに困っております。 name名を別にすれば簡単に出来そうなのですが、このinputが別CGIからの受け取りの関係で数が不定で同一nameが付いてしまいます。(inputは1個以上で上限は無し) CGI側を書き換える事は自分の技術的に不可能なので、このような質問となりました。 以下は自分なりに試行錯誤の末の拙いソースです。 どなたかお分かりになる方、ご教授を宜しくお願い致します。 <html> <head> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> <!-- function kakunin() { var sub = Form.getInputs('form1', 'text'); ( var subtotal = ~~~; ここに上で得た数字を合計するみたいなものがくるのかなと・・・) var total = subtotal * 200; document.form1.field_total.value = total; // 合計を表示 } // --> </script> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <form action="" name="form1"> <table> <tr><td><input name="kazu" type="text" value="2"></td></tr> <tr><td><input name="kazu" type="text" value="1"></td></tr> <tr><td><input name="kazu" type="text" value="3"></td></tr> <tr><td>・・・増えたりします・・・</td></tr> <tr><td><input type="button" size="8" onclick="kakunin()" value="合計を確認"></td></tr> <tr><td><input type="text" name="field_total" size="30" value="total"></td></tr> </table> </form> </body> </html>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
getElementsByNameで同一Nameを持つ要素(配列)が求められます。 var 合計 = 0; var 要素 = document.getElementsByName("kazu"); for( var i = 0 ; i < 要素.length ; i++ ) { var 値 = parseInt(要素[i].value); if( !isNaN(値) ) 合計 += 値; } 同じ名前でボタンとかないですよね? あるんだったらTypeも見なければなりません。(上記コードには無い)
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
inputのtypeがtextのものを拾えばよいのでしょ? nameなんて無視しちゃえばいいじゃない。 ちなみにformにnameつけるのは非推奨なのでやめた方がいいでしょう <script type="text/javascript"> function kakunin(f) { var subtotal =0; for(var i=0;i<f.length;i++){ if(f[i].type=="text" && f[i].value.match(/^\d+$/) ) subtotal+=parseFloat(f[i].value) } var total = subtotal * 200; f.field_total.value = total; } </script> <form> <table> <tr><td><input name="kazu" type="text" value="2"></td></tr> <tr><td><input name="kazu" type="text" value="1"></td></tr> <tr><td><input name="kazu" type="text" value="3"></td></tr> <tr><td><input type="button" size="8" onclick="kakunin(this.form)" value="合計を確認"></td></tr> <tr><td><input type="text" name="field_total" size="30" value="total"></td></tr> </table> </form>
お礼
yambejp様、ご厚意有難う御座います。^^ 完璧です。(^▽^喜) 非推奨等のアドバイスも有難う御座います。 (知らなかったですw^^;) 本チャンに組み込んでみますっ!^^ °゜°゜°。。ヘ(;^^)ノ
- SAYKA
- ベストアンサー率34% (944/2776)
>その記述がわかりません 残念だけどそれを書いてあげる事はできないよ。 そういう約束になってるからね。 この辺りを見ながら かな。 http://www.tohoho-web.com/js/form.htm
お礼
頑張ります^^;
- SAYKA
- ベストアンサー率34% (944/2776)
nameで引いて合計するんじゃなくて 配列として調べてnameが条件に合致する値だった時に内容を取り出せば良いだけなのでは?
お礼
SAYKA様、ご厚意有難う御座います。^^ ですが・・・orz 私の力不足のため、その記述がわかりません・・・(*ノ_<*) 配列・・・をどうやって取得するのでしょうか・・・ 申し訳ありません。。。
お礼
nda23様、ご厚意有難う御座います。^^ SAYAKA様の回答と発想は同じという事でしょうか・・・? スクリプトも書いて頂いたのですが、 何しろ力不足で・・・^^; 同じ名前のボタンは無いです。 やってみますっ ε=ε=ε= (;>o<) ・・・