jQuery KeyFilter插件问题

时间:2011-06-06 15:53:14

标签: javascript jquery regex mask keyfilter

使用jQuery的keyfilter插件,除了一个问题外,所有内容似乎都很好。

我使用正则表达式来过滤元素。

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

奇怪的是,这不仅允许使用字母数字字符,而且还允许输入'('。实际上,我传递给keyfilter的表达式并不重要,我无法停止'('被允许进入文本框。

还有其他人遇到过这个问题并且有解决方案吗?

1 个答案:

答案 0 :(得分:1)

我发现了问题。

如果键码是40,KeyFilter插件中的isSpecialKey函数返回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。