Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

同じFunctionで、同じ計算させたいのですが

私は今、以下のようにここで教えていただいたプログラムを参考に組んでは見たものの、同じ行をいくつもコピペすると計算されなくなってしまいます。1行だけの計算でしようとするとうまく計算されるのですが・・・ <HTML> <HEAD> <TITLE> タイトルバーに表示されるテキスト </TITLE> <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function SUM(){ if(!isNaN(document.sum.text1.value) && !isNaN(document.sum.text2.value) && !isNaN(document.sum.text3.value) && document.sum.text1.value && document.sum.text2.value && document.sum.text3.value){ document.sum.text4.value = eval(document.sum.text1.value) + eval(document.sum.text2.value) - eval(document.sum.text3.value) } if( !isNaN(document.sum.text5.value) && !isNaN(document.sum.text6.value) && document.sum.text5.value && document.sum.text6.value){ document.sum.text7.value = eval(document.sum.text4.value) + eval(document.sum.text5.value) + eval(document.sum.tex6.value) } } //--> </SCRIPT> </HEAD> <BODY> <FORM NAME="sum" onSubmit="SUM();return false;"> A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR> B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR> C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR> D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR> E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR> F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR> G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR> </FORM> </BODY> </HTML>

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

  • ベストアンサー
  • tamaCo
  • ベストアンサー率66% (47/71)
回答No.5

たまコです。 NIGHT2000さんの方法でFORMを沢山生成しても構わないのなら、 こんな感じにもできますね。 #インデントのため、全角スペース入れてます。ご注意。 <html> <head> <title>タイトルバーに表示されるテキスト</title> <script language="JavaScript"> <!--  function TotalSum(i)  {   var evalStr = eval("document.sum" + i);   with(evalStr)   {    if(!isNaN(text1.value) && !isNaN(text2.value) && !isNaN(text3.value) &&      text1.value && text2.value && text3.value)    {     text4.value = eval(text1.value) + eval(text2.value) - eval(text3.value);    }    if( !isNaN(text5.value) && !isNaN(text6.value) &&      text5.value && text6.value)    {     text7.value = eval(text4.value) + eval(text5.value) + eval(text6.value);    }   }  } //--> </script> </head> <body bgcolor="#ffffff"> <script language="JavaScript"> <!--  var i;  for(i = 1; i < 5; i++)  {   document.write('<form name="sum' + i + '" onSubmit="TotalSum(' + i + ');return false;">\n');   document.write('A<input type="text" name="text1" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('B<input type="text" name="text2" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('C<input type="text" name="text3" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('D=A+B-C<input type="text" name="text4" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('E<input type="text" name="text5" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('F<input type="text" name="text6" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('G=D+E+F<input type="text" name="text7" onChange="TotalSum(' + i + ')" size="10"><br>\n');   document.write('</form>\n');  } //--> </script> </body> </html> やりすぎ?(A^-^;) でもこれならfor文の中の「i = 1; i < 5;」の部分を変更するだけで いくらでも増やせますよ(笑 まぁ、邪道ですがこんな方法もあるという事で。。。 参考になれば幸いです。

obahiro
質問者

お礼

ご回答ありがとうございます。 なんせ、登録は50件あるときもあるそうなので大変参考になります。 ほんとにありがとうございます。 自分では、変数をたくさんつけて力技になってしまい、とてもじゃないですが他の人にはこんな自分のソースを見せれないと感じています。 ですが、みなさんのおかげで何とかなるかも・・・って感じです。 自分でも考えてみますが、なにかひらめきがございましたらまたお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#45976
noname#45976
回答No.4

ソースありがとうございます。 えと、やはりinputタグをそのままコピペして使ってらっしゃったのですね(^^; name属性は同じ名前を付けることが出来ないので、エラーを起こしてしまいます。 簡略化したソースを考えて教えて差し上げたいのですが、ちょっと今仕事がたてこんでまして・・・ めちゃ基本仕様のソースでよいでしょうか(^^; フォーム名を変え、その分のfunctionの追加にて、作成してます。 <HTML> <HEAD> <TITLE> タイトルバーに表示されるテキスト </TITLE> <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function SUM(){ if(!isNaN(document.sum.text1.value) && !isNaN(document.sum.text2.value) && !isNaN(document.sum.text3.value) && document.sum.text1.value && document.sum.text2.value && document.sum.text3.value){ document.sum.text4.value = eval(document.sum.text1.value) + eval(document.sum.text2.value) - eval(document.sum.text3.value) } if( !isNaN(document.sum.text5.value) && !isNaN(document.sum.text6.value) && document.sum.text5.value && document.sum.text6.value){ document.sum.text7.value = eval(document.sum.text4.value) + eval(document.sum.text5.value) + eval(document.sum.text6.value) } } function SUM2(){ //このnunctionを追加してます if(!isNaN(document.sum2.text1.value) && !isNaN(document.sum2.text2.value) && !isNaN(document.sum2.text3.value) && document.sum2.text1.value && document.sum2.text2.value && document.sum2.text3.value){ document.sum2.text4.value = eval(document.sum2.text1.value) + eval(document.sum2.text2.value) - eval(document.sum2.text3.value) } if( !isNaN(document.sum2.text5.value) && !isNaN(document.sum2.text6.value) && document.sum2.text5.value && document.sum2.text6.value){ document.sum2.text7.value = eval(document.sum2.text4.value) + eval(document.sum2.text5.value) + eval(document.sum2.text6.value) } } //--> </SCRIPT> </HEAD> <BODY> <TABLE> <FORM NAME="sum"> <TR> <TD>A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR></TD> <TD>B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR></TD> <TD>C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR></TD> <TD>D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR></TD> <TD>E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR></TD> <TD>F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR></TD> <TD>G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR></TD> </TR> </FORM> <!--一度フォームを閉じてます--> <FORM NAME="sum2"> <!--違うフォームとして作成してます--> <TR> <TD>A<INPUT TYPE="text" NAME="text1" onChange="SUM2()" SIZE="10"><BR></TD> <TD>B<INPUT TYPE="text" NAME="text2" onChange="SUM2()" SIZE="10"><BR></TD> <TD>C<INPUT TYPE="text" NAME="text3" onChange="SUM2()" SIZE="10"><BR></TD> <TD>D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM2()" SIZE="10"><BR></TD> <TD>E<INPUT TYPE="text" NAME="text5" onChange="SUM2()" SIZE="10"><BR></TD> <TD>F<INPUT TYPE="text" NAME="text6" onChange="SUM2()" SIZE="10"><BR></TD> <TD>G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM2()" SIZE="10"><BR></TD> </TR> </FORM> </table> </BODY> </HTML>

obahiro
質問者

お礼

お忙しいところ、ありがとうございます。 NIGHT2000さんの指摘されたように、変数をいくつも作ってしてみましたがこちらの担当者によると、レコードが多いときには50件の登録があるということで、そんな・・・って感じで簡略化できないか考えております。 いろいろと、お力になっていただきありがとうございます。 もし、時間にゆとりができたと時は、よろしくお願いいたします。 もう少し、上のソースを参考に考えさせていただきます。

すると、全ての回答が全文表示されます。
noname#45976
noname#45976
回答No.3

yu-kichanさんの言うとおり、上記のソースでは「tex6」の記述ミス以外に問題はなさそうです。 「コピペで複数行に増やすして問題の出たソース」というのを見せていただけませんか? ちなみに、 >HTMLのタグをそのままコピーして貼り付けて というのは、 inputタグの「NAME="text5"」などの記述もそのまま使っているということでしょうか?? もしそうだとしたら動きません・・・(^^; NAME属性は、すべて別の名前に設定しなくてはなりません。そして、追加した分のソースをスクリプト側にも追加する必要があります。 検討違いなことを言っていたらごめんなさい。(^^; とにかく問題のソースがわからないので・・・

obahiro
質問者

お礼

HTMLの部分は、こういう感じでコピペしています。 <HTML> <HEAD> <TITLE>test</TITLE> </HEAD> <TABLE> <FORM NAME="sum" onSubmit="SUM();return false;"> <TR> <TD>A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR></TD> <TD>B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR></TD> <TD>C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR></TD> <TD>D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR></TD> <TD>E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR></TD> <TD>F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR></TD> <TD>G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR></TD> </TR> <TR> <TD>A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR></TD> <TD>B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR></TD> <TD>C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR></TD> <TD>D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR></TD> <TD>E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR></TD> <TD>F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR></TD> <TD>G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR></TD> </TR> ・ ・ ・ </FORM> </BODY> </HTML> ということは、それぞれに、Functionを作っていかなければならないのでしょうか?すっきり簡単にする方法がありましたら、ぜひお願いいたします。

すると、全ての回答が全文表示されます。
  • yu-kichan
  • ベストアンサー率40% (4/10)
回答No.2

>HTMLで、一行だけだときちんと処理してくれるのですが、コピペで、複数行に増やすと処理してくれないんです・・・ すみません。現象が分かりません。 上のソースをhtmlにしてやってみると、ちゃんと計算されますが? 複数行に増やすというのは、どのようにしているのですか?

obahiro
質問者

補足

え~~とですね。 今は、WEB画面から、例えば、住所録みたいなのを作って、それに何人か分をまとめてDBに落とすというものを作っているんです。 そこで、一人ぶんのデータを入力したらその都度保存していくのではなく、何人かぶんをまとめてDBに落とすため、同じフィールドをまとめて何行か表示させて一気に入力しようというものです。 Excelのシートで、表を想像していただくと分かりやすいと思います。 複数行に増やすときは、HTMLのタグをそのままコピーして貼り付けて、一つのテーブルに格納しています。

すると、全ての回答が全文表示されます。
  • yu-kichan
  • ベストアンサー率40% (4/10)
回答No.1

ソースの15行目 document.sum.text6.value → document.sum.tex6.value になってます。

obahiro
質問者

お礼

お返事ありがとうございます。 「text6」にしましたが、やはり無理でした・・・ function SUM(){・・・} のところの問題だとは思うのですが。 HTMLで、一行だけだときちんと処理してくれるのですが、コピペで、複数行に増やすと処理してくれないんです・・・ どうしたらよろしいのでしょう・・・

すると、全ての回答が全文表示されます。

関連するQ&A