Jquery - 各种价格格式的总和bug

时间:2011-07-13 08:14:47

标签: javascript jquery

我有各种价格格式(取决于语言)用jquery计算价格的问题。

With German: 1.375,50 € (Returns 1.38 €)
English format: €1,375.50 (don't work)
French format: 1 375,50 € (Returns 1.00 €)
Italian format: €1,375.50 (don't work)
Spanish format: € 1.375,50 (don't work)

以下是我的工作演示的链接:http://jsfiddle.net/QmTNZ/63/

这是我的代码:

function ca(){
    var $overall = 0;

    $("tr.sum").each(function() {

        var $qnt = $(this).find(".qty");
        var $price = $(this).find("td").eq(2);

        console.log($qnt + " | " + $price);

        var sum = parseFloat($price.text().replace(",", ".")) * parseFloat($qnt.val().replace(",", "."));

        if(isNaN(sum)) {
            sum = 0;
        }
        $(this).find("td").eq(3).text(Math.round(sum * 100) / 100);

        $overall += sum;

    });

    $("#total").text($overall);
}

$(function() {

    ca();
    $('input.qty').bind('change keyup',function(){ca();});

});

价格“td”可以包含其他文本,例如“含19%税”。

我的问题是如何使用只有价格而没有欧元符号的css类在计算中使用它,如何在所有价格格式中避免价格计算中点和逗号的问题

(我总是在jquery中初学....)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

无论如何,您的代码都必须知道区域设置的格式规则,否则您将无法正确格式化您的结果。

但是,您可以通过从价格显示中分离出价格数据来避免担心代码主体中的区域设置差异。您可以这样做的一种方法是在包含价格显示的元素上使用data-* attribute

例如,假设您的行目前看起来像这样:

<tr><td>Widget</td><td>1</td><td>1 375,50 €</td></tr>

在那里,第三个单元格包含具有各种格式的文本的价格。现在,在输出表时,如果您将价格包含在已知的特定格式中作为data-price属性,则可以避免所有这些麻烦:

<tr><td>Widget</td><td>1</td><td data-price="1375.5">1 375,50 €</td></tr>

然后,您可以通过attr("data-price")

访问它
var thisPrice = parseFloat($(this).find("td:eq(2)").attr("data-price"));

这可以很好的方式为您提供价格。

但是,最后,您需要知道区域设置规则才能以正确的格式显示$overall