2011-11-15 40 views
1

我試圖修改現有的JavaScript行,我經常使用它來格式化表單字段中的美元金額條目,以便即使未輸入美分也是如此。我已經使用了多年:從JavaScript中刪除非數字或小數點INLINE

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value).toFixed(2);" /> 

...但它打破如果輸入不是數字或小數其他什麼...所以我想我大概可以增加一個str.replace()過濾掉不允許的字符。它需要完全獨立(如圖所示),以便我可以根據需要輕鬆地將這一行onChange添加到表單字段。儘管如此,這仍然適用於數字,但不會剝離其他東西。我究竟做錯了什麼?

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value.replace('/[^0-9\.]+/g','')).toFixed(2);" /> 
+0

爲什麼地球上你這樣做內聯?你喜歡在任何地方複製相同的代碼嗎?我知道你希望能夠將它添加到任何表單字段中,但是肯定可以使它成爲一個庫函數?請注意,您的正則表達式當前允許多個小數點。還要注意,你不需要說'javascript:',因爲瀏覽器已經在任何事件處理器中期待JavaScript;如果你在錨標籤的'href'屬性中使用它,那麼這個前綴只是必需的(只有有意義) - 你真的不應該這樣做,但這是另一天的討論。 – nnnnnn

+0

爲什麼倒票?我通常每頁最多使用一次...並且希望能夠輕鬆地粘貼到我正在處理的任何項目上,而無需其他依賴項。我不濫用它,我只是需要超便攜的東西,在我想快速格式化傳入值的場合使用。 – techtheatre

+0

我沒有downvote(我從來沒有downvoted,並在任何情況下,我不認爲你的帖子應得的downvote)。人們常常沒有充分的理由就會倒退 - 幾個小時以前,有人就我的一個老問題和答案這樣做了,卻沒有留下任何解釋。有些人只是不明白_constructive_批評的概念... – nnnnnn

回答

8

在正則表達式中不應該有引號。你需要改變

this.value.replace('/[^0-9\.]+/g','') 

this.value.replace(/[^0-9\.]+/g,'') 
2

你不應該引用您的正則表達式,所以整個第二行應該是:

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value.replace(/[^0-9\.]+/g,'')).toFixed(2);" /> 
相關問題