我需要一些幫助來清理一個在Firefox中導致問題的流行的香草JavaScript代碼。僅支持數字的JavaScript Firefox Firefox解決方案
下面哪個/ keyCode檢查似乎是關於最流行的香草JS解決方案,只允許數字爲input
或textarea
。
var charCode = (e.which) ? e.which : e.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
通過標籤上的onkeypress="return function(event);"
調用。
但是,Firefox似乎將箭頭鍵綁定到onkeypress
調用,而不是像其他瀏覽器那樣僅對onkeyup
和onkeydown
進行綁定。這意味着例如左箭頭鍵的charCode
是37
,但%(shift + 5)的charCode
也是如此。更重要的是,這意味着方向鍵不能用於導航(向左或向右移動插入符/文本光標)。
然而,不同的是,左箭頭鍵具有keyCode 37
,而%具有charCode
和37
which
(如圖上http://www.asquare.net/javascript/tests/KeyCode.html)。所以,我是能夠使箭頭鍵的工作只是罰款通過執行以下操作:
if (charcode > 31 && (charcode < 48 || charcode > 57)) {
if (e.keycode && e.keyCode > 36 && e.keyCode < 41) {
return true;
}
return false;
}
return true;
不過,我覺得這是不是做的最好的還是乾淨的方法,並有可能被不同的處理多個鍵通過Firefox而不僅僅是方向鍵。什麼是更清潔的香草JS解決方案或至少檢查此功能中的箭頭鍵的方法?
非常感謝!
編輯:我只是想出的是,即使代碼解決它爲Firefox,它引入了一個新的問題,所有其他的瀏覽器,在這些現在允許輸入charCodes 37-40(即%)。似乎不是檢查keyCode
,而是以相同的方式檢查charCode
或which
。
你知道有' '?請注意,它阻止某些鍵的用戶界面不太友好:他們可能認爲鍵盤壞了。此外,他們仍然可以使用複製/粘貼(即使通過上下文菜單),所以你永遠不會完成。更好的是接受用戶輸入,並在之後驗證它,也許可以通過輸入附近的顏色指示或消息進行驗證。 – trincot
我確實知道,但這並不適合這裏的需求。另外,從我所知道的情況來看,其他非字符鍵似乎表現得很好(因爲它只是「onkeypress」使它們遠離輸入/文本區),而不是onkeydown和onkeyup。顯然只有數字纔會被輸入,並且如果他們複製/粘貼任何東西,它會將文本重置爲一個數字。然而,箭頭導航是必須的,Firefox是一個足夠流行的瀏覽器,讓我擔心至少確保這些工作很好。 –
我找到了原始代碼,因爲我正在尋找只使用輸入的數字進行的操作,而不僅僅是爲了防止其他字符被輸入原始代碼的目的(也適用於textareas而不是輸入) 。然而,使用原始代碼是解決問題的最簡單最明確的方式,並要求提供更好的解決方案,因爲解決方案將保持不變。希望清除它。 :) –