2010-09-07 63 views
1
$(function(){ 
    $('input[name="username"]').keydown(function(key){ 
     if (jQuery.inArray(key.keyCode, 
      [8,37,39,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]) 
      == -1 || key.shiftKey){ 
       return false; 
     } 
    }); 
}); 

這樣做是對文本字符Ajax驗證,它只是讓我從a-z0-9,而不是任何其他字符輸入字母,但我希望它讓我有_(下劃線)字符爲好。如何添加一個字符到這個驗證功能?

+2

「Ajax驗證」?這與[Ajax]無關(http://en.wikipedia.org/wiki/Ajax_%28programming%29)。 – 2010-09-07 23:44:32

+0

由於下劃線字符需要移位,您的問題比「keydown」事件大。 – 2010-09-08 12:59:46

回答

3
$('input[name="username"]').keypress(function(event) { 
    var k = event.which; 
    /* 0:  non-input keys 
    8:  backspace 
    48-57: 0-9 
    97-122: a-z 
    95:  _ */ 
    if (k != 0 && k != 8 && k != 95 && 
     (k < 48 || k > 57) && (k < 97 || k > 122)) 
    return false; 
}); 

$('input[name="username"]').keyup(function() { 
    var inp = $(this).val(); 

    if (inp.match(/[^a-z0-9_]/g)) 
    $(this).val(inp.replace(/[^a-z0-9_]/g, '')); 
}); 

keypress事件處理程序試圖趕上無效字符前都輸入到現場,以防止分心「跳躍」效應時顯示無效字符和keyup再次刪除。請注意,event.which包含由jQuery規範化的字符代碼。

keyup處理是必要趕上了在使用按Ctrl-V(注意,不幸的是使用菜單選項編輯不趕輸入>粘貼)輸入的字符。在每keyup(由其值改變引起)之後,需要額外的測試來停止輸入字段回到其最左邊的位置。現在只有在需要刪除某些東西時纔會重置其位置。

您可以在JSBin上進行測試。

+0

這是最好的答案,因爲需要下劃線,shift鍵,標準化和所有爵士樂:) – 2010-09-08 13:19:55

+1

現代瀏覽器有一個粘貼事件,它會過早觸發,但是您可以使用setTimeout,從事件處理函數內部以零延遲方式捕獲鼠標粘貼。 – Tgr 2010-09-08 22:08:30

0

檢查這兩個鍵碼,Shift鍵,:

(key.shiftKey && key.keyCode == 109) 

正如其他人更不用說了,如果你需要在客戶端嚴格驗證,你需要做的不僅僅是處理​​事件。

+0

189是IE的關鍵代碼; jQuery規範'event.which',它獲得了代碼109的分配。請參閱[.keydown()](http://api.jquery.com/keydown/)。 – 2010-09-07 23:55:56

0

將代碼27添加到數組中?

+0

27?你從哪裏得到那27個? – 2010-09-07 23:53:40

+0

nope it deosnt work – getaway 2010-09-08 00:02:54

2

一個這樣做的稍微更可讀的方式是

$('input[name="username"]').keydown(function() { 
    $(this).val($(this).val().replace(/[^a-zA-Z0-9_]/g, '')); 
}); 

還要注意的是驗證上的keydown事件不會從副本阻止某人/粘貼用鼠標任意TXT。

+1

that deost work sorry mate – getaway 2010-09-08 00:00:28

+0

謝謝,但它仍然讓我輸入非法字符,我只想要az 0-9和下劃線 – getaway 2010-09-08 00:41:06

相關問題