Jquery输入字段总结了奇怪的结果

时间:2016-05-21 16:55:07

标签: javascript jquery sum concatenation input-field

我想将这些数字输入相加,每个数字输入与相关范围内的特定价格相关联 但凭借我的功能,我得到了非常错误的结果...... 本质上总是连接而不是总和,但我已经尝试了parseFloat和parseInt的各种组合,总是出现相同的错误
我哪里错了?

这里是html:

<table width="300" border="1" style="border-collapse:collapse;">
<tr>
    <td width="40">1</td>

    <td><input class="txt" type="number" name="txt"/><span    class="valore">10</span></td>
</tr>
<tr>
    <td>2</td>

    <td><input class="txt" type="number" name="txt"/><span class="valore">20</span></td>
</tr>
<tr>
    <td>3</td>

    <td><input class="txt" type="number" name="txt"/><span class="valore">30</span></td>
</tr>
<tr id="summation">

    <td align="right">Sum :</td>
    <td align="center"><span id="sum">0</span></td>
</tr>
</table>

这是JQuery:

 $(document).ready(function(){

  $(".txt").each(function() {

        $(this).keyup(function(){
            TotalSum();
        });
    });

});

function TotalSum() {

    var sum = 0;
    var prezzo = 0;
    $(".txt").each(function() {
              prezzo = parseFloat($(".valore").text()); 
        if(!isNaN(this.value) && this.value.length!=0) {
            sum +=(parseFloat(this.value))*(parseFloat(prezzo));
        }

    });
    $("#sum").html(sum.toFixed(2));
}

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应该为元素而不是类valore分配不同的ID。否则,prezzo总是10,因为它是jQuery在类valore中找到的第一个元素。或者,您可以使用动态选择Chintan建议的兄弟节点的jQuery方法。

其次,将来,如果您要更改$(".valore").text()元素的内容,了解使用$(".valore").html()valore之间的区别可能会很有用。第一种方法只提取元素中的文本并忽略所有HTML标记,而第二种方法也返回HTML标记。

答案 1 :(得分:0)

这就是你做错了。

您正在使用replay()选择器获取span值。有$('.valore')的3个span元素 - 所以.valore无论如何都会为您提供组合的连接值prezzo = parseFloat($(".valore").text());

请尝试使用"102030"或更常用的$(this).next().text();。以下作品。看看吧。

&#13;
&#13;
$(this).siblings(".valore").text());
&#13;
$(document).ready(function(){

  $(".txt").each(function() {

        $(this).keyup(function(){
            TotalSum();
        });
    });

});

function TotalSum() {

    var sum = 0;
    var prezzo = 0;
    $(".txt").each(function() {
        prezzo = parseFloat($(this).siblings(".valore").text()); 
        //console.log(prezzo);
        if(!isNaN(this.value) && this.value.length!=0) {
            sum +=(parseFloat(this.value))*(parseFloat(prezzo));
        }

    });
    $("#sum").html(sum.toFixed(2));
}
&#13;
&#13;
&#13;