1

配列要素をループして、それらの合計を見つけ、その値で div を更新しようとしています。

何らかの理由で、私の each() ループが期待どおりに機能しません。たとえば、12 を 3 回入力すると、答えは 36 のはずなのに 72 になってしまいます。

任意の提案、ありがとう!

ここで完全なコードを表示: http://jsfiddle.net/lakesmaa/DGPST/3/

 $.each(array, function() { 
       sum += parseInt(this);  


    }); 
    $('.total').html(sum); 

    };
4

5 に答える 5

2

ボタンをクリックするたびに、アイテムを配列に追加しています。

array.push(newItem);   

次に、配列を反復処理し、各項目を合計に追加します。

したがって、最初のクリックで:

array = [12], sum = 12

2 回目のクリック:

array = [12, 12], sum = (12 + 12 + 12) = 36

3 回目のクリック:

array = [12, 12, 12], sum = 36 + 12 + 12 + 12 = 72

sum関数内を次のようにリセットします0

$('#button').click(function() { 
    var sum = 0;  // reset

jsFiddle デモ

または、配列を反復せずにアイテムを直接追加します。

array.push(newItem);   
sum += parseInt(newItem);

// Remove the for each loop iterating over the array to accumulate sum

jsFiddle デモ

于 2013-09-30T20:12:25.837 に答える
1

クリックハンドラーの内部をリセットすることはないsumため、クリックするたびに、離れたところから開始します。

必要なもの:

// ...
$('#button').click(function() { 
    var sum = 0; 
    // ...
});

http://jsfiddle.net/DGPST/9/

于 2013-09-30T20:13:01.913 に答える
0

配列の値を合計する前に、毎回合計をゼロにリセットしたいとします。現在、ボタンをクリックしたときにすべての値を追加するグローバル変数は 1 つだけです。

var sum = 0;
$.each(array, function() { 
    sum += parseInt(this);  
}); 
$('.total').html(sum); 

(整理されたコードのデモ)。

于 2013-09-30T20:17:34.353 に答える
0

これは、jQuery でラップされた要素を期待して解析しようとしているthis内で使用しているためです。$.each()

thisあなたのインスタンスでは実際にString {0: "1", 1: "2"}(console.logに記録すると表示されます)

代わりに、コールバック関数の項目 (第 2 パラメーター) を使用し.each()ます。

$.each(array, function(index, item) { 
    sum += parseInt(item);    
}); 

これにより、意図したとおり、12 が 3 回入力されたときに 36 がインターンされます。

jsFiddle デモ

于 2013-09-30T20:12:28.233 に答える
0

sumループの前にリセットし、次の$(each)ようにコールバックに値を渡す必要があります: http://jsfiddle.net/DGPST/17/

于 2013-09-30T20:18:10.040 に答える