0

我正在尝试做的是检查每个输入的价格,并从中得出一个总和。

这是我的代码

    function totalSum(e) {
    e.preventDefault();
    var unit = $("input:checked").parent("dt").siblings("dd").find("span"); 
    total = 0;
    $.each(unit, function(index, obj){
        total += parseInt($(obj).text(), 10);
    });
    $("#totalPrice").html('<span class="count">€ ' + total + '</span> €');
}

每个单元都在其跨度内找到。Total 设置为 0。我尝试在每个检查的对象上调用 parseInt,然后将总数添加到 span 内。在 HTML 中,价格是这样表示的:

    <dd><span class="costo">€199</span></dd>

如您所见,有欧元标记。恐怕无法解析,是这样吗?因为什么都没有改变!我应该怎么写?提前致谢

好吧,我感到很惭愧,但我无法让它发挥作用。我决定将代码放在最低限度,所以我尝试了这种方式

    <body>
    <div class="bla"><span class="count">1</span></div>
    <div class="bla"><span class="count">1</span></div>
    <div class="bla"><span class="count">1</span></div>

    <div id="total"></div>
    <script type="text/javascript" src="js/jquery-1.9.0.min.js" /></script> 
    <script>
    $(document).ready(function(){


    function sum() {
        var prices = $("div.bla").find(".count");
        total= 0;
        $.each(prices, function(index, obj){
    total += parseFloat($(obj).text());
});

$("#total").html('<span class="count">'+total +'</span> €');
    };

});

这应该工作,但没有出现。有人能这么好心地告诉我出了什么问题吗?!

4

4 回答 4

1

您可以简单地从文本中删除单位:

var text = $(obj).text().replace(/[€\$]/,''); // add other units if needed
total += parseInt(text, 10); // are you sure you don't prefer parseFloat ?

或者,如果您只想保留数字 and +-请执行

var text = $(obj).text().replace(/[^\d\-\+]/g, '');
于 2013-02-05T18:44:47.510 回答
1

您可以替换任何非数字字符:

total += parseInt($(obj).text().replace(/[^\d.-]/, ''), 10);

此外,您可以unit.each()代替$.each(unit,但这对您尝试执行的操作没有影响。

于 2013-02-05T18:45:59.347 回答
0

更改您的 parseInt 以跳过第一个字符。

total += parseInt($(obj).text().substring(1),10);
于 2013-02-05T18:45:48.643 回答
0

经过几天的尝试和阅读最好的方法,我相信这可能是我试图实现的一个优雅的解决方案:)

$("input").on("click", function() {
    var j = $("input:checked");
    t = 0;
    $(j).each(function() {

        t += parseInt(this.value, 10);
    });
    $("#total").html("<span>€ " + t + "</span>");
    });
于 2013-02-07T01:19:59.637 回答