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

在第二次点击:

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

第三次点击:

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

那是因为你this在你的 中使用$.each(),它期望 & 试图解析一个 jQuery 包装的元素。

this在您的实例中实际上是String {0: "1", 1: "2"}(console.log 它,您会看到)

而是使用.each()回调函数的项目(第二个参数)。

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

这将按预期为您提供 36,当 12 输入 3 次时。

jsFiddle 演示

于 2013-09-30T20:12:28.233 回答
0

您希望每次在对数组值求和之前将总和重置为零。目前,您只有一个全局变量,您可以在单击按钮时向其中添加所有值。

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

带有整理代码的演示)。

于 2013-09-30T20:17:34.353 回答
0

您需要sum在循环之前重置并将值传递给$(each)回调,如下所示:http: //jsfiddle.net/DGPST/17/

于 2013-09-30T20:18:10.040 回答