JQuery:通过输入元素循环

JQuery:通过输入元素循环,jquery,loops,Jquery,Loops,我有几行需要迭代的输入框(文本),将一行中的值相乘,然后对结果求和。我能找到的唯一解决方案是将输入框转换为数组: var array1 = $('input[id$="txtVal1"]').toArray(); var array2 = $('input[id$="txtVal2"]').toArray(); var temp1; var temp2; var sum=0; 然后使用以下公式进行迭代和求和: for (i = 0; i < array1.length; i++) {

我有几行需要迭代的输入框(文本),将一行中的值相乘,然后对结果求和。我能找到的唯一解决方案是将输入框转换为数组:

var array1 = $('input[id$="txtVal1"]').toArray();
var array2 = $('input[id$="txtVal2"]').toArray();
var temp1;
var temp2;
var sum=0;
然后使用以下公式进行迭代和求和:

for (i = 0; i < array1.length; i++) {
    if (array1[i].value.length > 0) { //make sure we have data
        temp1 = parseFloat(array1[i].value);
        temp2 = parseFloat(array2[i].value);
        sum += temp1 * temp2;
    }
}
for(i=0;i0){//请确保我们有数据
temp1=parseFloat(array1[i].值);
temp2=parseFloat(array2[i].值);
总和+=temp1*temp2;
}
}

这很有效。不过,我只是在学习JQuery,想使用规范方法。

没有必要使用
toArray
,而是使用方法


您可以直接循环通过选择器找到的所有项目,如下所示:

$('input').each(function(index,data) {
   var value = $(this).val();
});

如前所述,您可以使用.each()完成此任务,但下面是一个示例,它根据问题中的要求使用您的数据。您提到了输入的“行”,所以我假设它位于表行中:

$('tr').each(function () {
    var $this = $(this),
        sum = parseFloat($this.find('input[id$="txtVal1"]').val()) * parseFloat($this.find('input[id$="txtVal2"]').val());
    alert(sum);
});

这里有一个

这将只循环1项,如果有11个编号一致的输入,则循环3项。@GungFoo,嗯。。。让我检查一下,您也可以使用$.each()<代码>$('tr')。每个(函数(i,el){alert($(el).find('input[id$=“txtVal1”]')).val()*$(el).find('input[id$=“txtVal2”]')).val})实际上,它们在一个具有id的div中,因此这可能会起作用。感谢所有提交的想法。以下是我尝试的:
$('#divDataRow')。每个(函数(){var$this=$(this);sum+=parseFloat($this.find('input[id$=“txtVal1”]')).val()*parseFloat($this.find('input[id$=“txtVal2”]')).val());警报('sum:'sum:'+sum););警报(“总和:”+总和)
但即使至少有两行,sum始终是第一行的乘积。(很抱歉格式不正确,我确实阅读了《评论指南》,但无法插入换行符…)应该只有一个#divDataRow(ID应该是唯一的),所以这不起作用。如果需要倍数,请使用类名。如果你仍然有问题,发布你的html样本,我可以给出更好的答案。或者更新JSFIDLE并发回更新后的url。为什么要使用索引和数据?因为这是一个非常通用的示例,我提到它们只是为了让读者知道它们作为each()方法的参数存在。
$('tr').each(function () {
    var $this = $(this),
        sum = parseFloat($this.find('input[id$="txtVal1"]').val()) * parseFloat($this.find('input[id$="txtVal2"]').val());
    alert(sum);
});