2011-07-13 7 views
0

さまざまな価格形式(言語によって異なる)で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。 %tax "となります。

ここで私の質問は、ユーロ記号を使わずに価格だけを計算するcssクラスを使用して、計算に使用する方法と、価格計算のドットとカンマの問題をすべて回避する方法フォーマット。

(私は....いつもjqueryの初心者です)の助けを

ありがとう!

答えて

1

他のものに関係なく、あなたのコードはロケールのフォーマット規則を知っている必要があります。そうしないと、結果の合計を正しくフォーマットできなくなります。

ただし、データ価格表示から価格を分離することにより、あなたのコードの本体でのロケールの違いを心配回避することができます。あなたが行うことができる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を正しい形式で表示するには、ロケールのルールを知る必要があります。

+0

まさに私の考え。 'data-price'属性を使うか、' jQuery'のネイティブ['$ .data()'](http://api.jquery.com/data/)を使います。 – Shef

+0

@Shef:はい、しかし、 'data- *'属性を扱っていることが分かっているなら 'data( 'price') 'を使って' attr(' data-price ') ' 。 jQueryは、 'data'関数(' data- * '属性とプログラムで割り当てられた他の構造化データ)に2つの無関係なものを組み込みます。 –

+0

ありがとう、良い解決策;) – Bizboss

関連する問題