2

これは基本的な html/javascript コードですが、すべてのフィールドの合計を取得する際に問題が発生しています。(元のプロジェクトでは 50 フィールドですが、現在は 5 のままです)

フィールドが空白の場合は、それを無視して、入力済みのフィールドのみを追加する必要があります。

HTML コード:

value1:<input type="text" id="total_1" ><br>
value2:<input type="text" id="total_2" ><br>
value3:<input type="text" id="total_3" ><br>
value4:<input type="text" id="total_4" ><br>
value5:<input type="text" id="total_5" ><br>
total:<input type="text" id="totalresult" >
<button type="button" onclick="getTotal(); return false;">Get total</button>

Javascript:

function getTotal() {
var sum;
for (i = 1; i <=5 ; i++) {
    var total = document.getElementById('total_' + i.toString()).value;
    if (total != '') {
        sum = parseFloat(total) + sum;
        document.getElementById('totalresult').value = sum;
    }

  }

}

コードが機能しない理由がわかりません。

これが私のフィドルです

4

5 に答える 5

3

コードを初めて実行するとき、合計は未定義になります。

初期化する

var sum = 0;

また、フィドルで機能させるには、変更する必要があります

左上の onLoad を「No wrap - in」に

于 2013-04-11T18:53:06.640 に答える
1

getTotalあなたのフィドルがグローバルを作ることができない理由がわかりません。しかし、あなたの主な問題は、合計が開始として定義されていないことです。これによりNaN(Not a Number) が生成されます。

var sum;

sum = 1 + sum; // NaN

....

sum = 1 + undefined; // NaN

sum = 1 + NaN; // NaN

jsbin.com のデモ

最初に合計をゼロに設定する必要があります。

var sum = 0;
for ( ... ) { ...

adrianp が指摘した動作デモ:It would probably be more clear if you uploaded the working code to jsbin.

于 2013-04-11T18:54:28.853 に答える
1

sum 変数を定義していないため、javascript はそれを NaN と見なします。これは、数値ではないことを意味します。正しく設定するには、初期化する必要があります。

  function getTotal() {
            var sum = 0;
    for (i = 1; i <=5 ; i++) {
    var total = document.getElementById('total_' + i.toString()).value;
if(isNaN(total) || total.indexOf(' ') == 1) {
    alert("Please type a number");
    document.getElementById("totalresult").value = "I cant sum alphanumerics";
    return false;
} 

if (total != '') {
    sum = parseFloat(total) + sum;
    document.getElementById('totalresult').value = sum;
}

} }

フィドル

于 2013-04-11T18:55:47.620 に答える
1

2 つのことを行う必要があります。1、合計をゼロに初期化します。2、入力値が数値でないことを確認します。

function getTotal() {
    var sum = 0;
    for (i = 1; i <= 5; i++) {
        var total = document.getElementById('total_' + i).value;
        if (!isNaN(parseFloat(total))) sum = parseFloat(total) + sum;
        document.getElementById('totalresult').value = sum;
    }
}

jsFiddle の例

于 2013-04-11T19:00:53.880 に答える