• ベストアンサー

同一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>

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

getElementsByNameで同一Nameを持つ要素(配列)が求められます。 var 合計 = 0; var 要素 = document.getElementsByName("kazu"); for( var i = 0 ; i < 要素.length ; i++ ) {   var 値 = parseInt(要素[i].value);   if( !isNaN(値) ) 合計 += 値; } 同じ名前でボタンとかないですよね? あるんだったらTypeも見なければなりません。(上記コードには無い)

hide-key
質問者

お礼

nda23様、ご厚意有難う御座います。^^ SAYAKA様の回答と発想は同じという事でしょうか・・・? スクリプトも書いて頂いたのですが、 何しろ力不足で・・・^^; 同じ名前のボタンは無いです。 やってみますっ ε=ε=ε= (;>o<) ・・・

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

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>

hide-key
質問者

お礼

yambejp様、ご厚意有難う御座います。^^ 完璧です。(^▽^喜) 非推奨等のアドバイスも有難う御座います。 (知らなかったですw^^;) 本チャンに組み込んでみますっ!^^ °゜°゜°。。ヘ(;^^)ノ

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.3

>その記述がわかりません 残念だけどそれを書いてあげる事はできないよ。 そういう約束になってるからね。 この辺りを見ながら かな。 http://www.tohoho-web.com/js/form.htm

hide-key
質問者

お礼

頑張ります^^;

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

nameで引いて合計するんじゃなくて 配列として調べてnameが条件に合致する値だった時に内容を取り出せば良いだけなのでは?

hide-key
質問者

お礼

SAYKA様、ご厚意有難う御座います。^^ ですが・・・orz 私の力不足のため、その記述がわかりません・・・(*ノ_<*) 配列・・・をどうやって取得するのでしょうか・・・ 申し訳ありません。。。