2012-05-30 35 views
0

我借了一些代碼從這個問題的缺失(見答覆4):jQuery驗證碼不會允許輸入的文本

how do i block or restrict special characters from input fields with jquery?

然而,在使用的代碼,它的出現,雖然它當您輸入整齊時進行驗證,它不允許您編輯您輸入的任何內容。

$('input').bind('keypress', function (event) { 
var regex = new RegExp("^[a-zA-Z0-9]+$"); 
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
if (!regex.test(key)) { 
    event.preventDefault(); 
    return false; 
}}); 

我有點困惑,我試圖通過改變按鍵來KEYUP調整,但這個剛剛從工作停止驗證。任何指針都會被接受。

回答

1

這似乎是一個瀏覽器特定的問題。在Firefox中,按鍵包括元鍵,例如退格鍵和箭頭鍵,而Chrome則沒有。如果你調整你的邏輯有點喜歡哪過則charCode(我認爲這是更好的支持反正)你結束了這個

$('input').bind('keypress', function(event) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var code = event.charCode === 0 ? event.which : event.charCode; 
    var key = String.fromCharCode(code); 
    if (!regex.test(key) && code !== 8) { 
     // 8 is ascii code for backspace 
     event.preventDefault(); 
     return false; 
    } 
}); 

這撥弄還寫道勸慰鍵和代碼在事件被傳遞打字時。 http://jsfiddle.net/Q2MWS/5/

+0

謝謝JaredMcAteer,工作很可愛 - 非常感謝。儘管我現在必須弄清楚如何處理粘貼的輸入。 –

+0

@BernieDavies有一個'onpaste'事件,您可以勾選並驗證粘貼的文本。 http://stackoverflow.com/questions/1601353/detect-paste-on-input-box – JaredMcAteer

0

我認爲event.preventDefault()會阻止編輯輸入的字符,如果它們不匹配正則表達式。檢查event.which/event.charCode的其他值,如退格鍵,空格,小數點鍵等

+0

嗯,只需閱讀jquery文檔中的event.which文件,它有點混亂。我想我可能會回到更爲標準的方法,除非任何人有任何其他建議。儘管謝謝你的回覆。讚賞。 –