2013-03-22 40 views
0

在你說它的重複之前,我不問如何真正格式化價格。但是詢問我做錯了什麼,或者我應該做些什麼來按照我想要的方式來實現它。輸入價格格式化javascript,其中錯誤

我做了價格的格式(實際上通過複製從某處的代碼) http://jsfiddle.net/qwY24/

價格1

,但現在我想格式化的價格在輸入字段本身(價格2),它工作得很好,直到6位數,但之後就會搞砸了。它有兩個問題

  1. 格式後6位數搞砸
  2. 時按返回鍵(刪除號碼)價格不格式化後6位數只有

代碼

$(".price1").on("keyup",function(){ 
    var price = $(this).val(); 
    $(".formatted1").text(price.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
}); 

$(".price2").on("keyup",function(){ 
    var price = $(this).val(); 
    price = price.replace(",",""); 
    $(".price2").val(price.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
    $(".formatted2").text(price.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); 
}); 
<label>Price 1</label> 
<input type="text" class="price1" /><br /> 
<label><b>Price 1 Formatted:</b></label> 
<span class="formatted1"></span><br /><br /><br /> 

<label>Price 2</label> 
<input type="text" class="price2" /><br /> 
<label><b>Price 2 Formatted</b></label> 
<span class="formatted2" ></span><br /><br /><br /> 
+0

'\ d \ d \ D'可以替換爲\ d {3}'。並嘗試使用'*''+''?'。他們比較0或更多,1或更多,0或1. – 2013-03-22 09:08:10

+0

@allendar謝謝你,但我還沒有真正理解正則表達式。我應該花一些時間學習*代碼是從某處複製的:) – cjmling 2013-03-22 09:47:23

回答

0

price.replace(",","")只替換第一個逗號的實例,不是全部。與

price = price.replace(/,/g,""); 

(另外,.toString()部分中的下一行是不必要的,因爲變量已經是一個字符串)替換它

演示:http://jsfiddle.net/qwY24/3/

+0

非常感謝...不是一個問題,但爲什麼他們沒有讓js替換爲php str_replace:S ...容易讓新手感到困惑: ( – cjmling 2013-03-22 09:45:16

+1

@cjmling你可以使用字符串輸入和一個全局標誌(g)作爲第三個參數,使其表現得像str_replace一樣,但它被認爲是非標準的 – 2013-03-22 10:10:50

+0

好的問題,我當然認爲'replace()'用字符串應該默認全部替換。 – JJJ 2013-03-22 10:11:07