プロが教えるわが家の防犯対策術!

私は今、以下のようにここで教えていただいたプログラムを参考に組んでは見たものの、同じ行をいくつもコピペすると計算されなくなってしまいます。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>

A 回答 (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;」の部分を変更するだけで
いくらでも増やせますよ(笑

まぁ、邪道ですがこんな方法もあるという事で。。。
参考になれば幸いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/21 10:33

ソースありがとうございます。


えと、やはり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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/21 10:29

yu-kichanさんの言うとおり、上記のソースでは「tex6」の記述ミス以外に問題はなさそうです。


「コピペで複数行に増やすして問題の出たソース」というのを見せていただけませんか?

ちなみに、
>HTMLのタグをそのままコピーして貼り付けて
というのは、
inputタグの「NAME="text5"」などの記述もそのまま使っているということでしょうか??
もしそうだとしたら動きません・・・(^^;
NAME属性は、すべて別の名前に設定しなくてはなりません。そして、追加した分のソースをスクリプト側にも追加する必要があります。

検討違いなことを言っていたらごめんなさい。(^^;
とにかく問題のソースがわからないので・・・
    • good
    • 0
この回答へのお礼

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を作っていかなければならないのでしょうか?すっきり簡単にする方法がありましたら、ぜひお願いいたします。

お礼日時:2001/06/20 15:15

>HTMLで、一行だけだときちんと処理してくれるのですが、コピペで、複数行に増やすと処理してくれないんです・・・


すみません。現象が分かりません。

上のソースをhtmlにしてやってみると、ちゃんと計算されますが?
複数行に増やすというのは、どのようにしているのですか?

この回答への補足

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

補足日時:2001/06/20 14:31
    • good
    • 0

ソースの15行目



document.sum.text6.value → document.sum.tex6.value

になってます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/20 14:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!