2011-06-06 317 views
1

對jQuery使用keyfilter插件,除了一個問題,似乎都很好。jQuery KeyFilter插件問題

我正在使用正則表達式來過濾元素。

$('#nameVal').keyfilter(/[0-9a-zA-Z]/); 

奇怪的是,這不是隻允許字母數字字符,但它也允許「(」來輸入。事實上,這並不重要表達我傳遞給keyfilter,我無法停止「(」被允許在文本框中。

有其他人遇到這個問題,有沒有解決辦法?

+0

我剛剛在jQuery keyfilter演示中試過它,它工作得很完美,也許你在代碼中的某處出現了錯誤,或者它是舊的keyfilter版本中的錯誤! – Mohammad 2011-06-06 16:31:04

+0

http://jquery-keyfilter.googlecode.com/svn/trunk/demo.html 此演示頁面對我來說有完全相同的問題。添加過濾器的源代碼行是$('#by-re')。keyfilter(/ [ABC]/i);但我仍然可以輸入開括號字符。看起來像KeyFilter中的一個bug。 – t0mm0d 2011-06-07 08:04:27

+0

如果我傳遞一個函數,如$('#nameVal')。keyfilter(function(c){return false;});我仍然可以輸入(。似乎當我輸入開括號字符時,它正在繞過keyfilter。這發生在IE和Chrome中。 – t0mm0d 2011-06-07 08:39:39

回答

1

我發現這個問題。

在KeyFilter插件返回的isSpecialKey功能如果鍵碼爲40,則爲true,這是鍵碼'('。這意味着測試不會在角色上執行。

var isSpecialKey = function(e) 
{ 
    var k = e.keyCode; 
    var c = e.charCode; 
    return k == 9 || k == 13 || /*(k == 40 && (!$.browser.opera || !e.shiftKey)) ||*/ k == 27 || 
     k == 16 || k == 17 || 
     (k >= 18 && k <= 20) || 
     ($.browser.opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45))) 
     ; 

    }; 

註釋掉上面的代碼可以解決這個問題。不完全確定這會對其他瀏覽器產生什麼影響,但它適用於IE8和Chrome。