使用jQuery的keyfilter插件,除了一个问题外,所有内容似乎都很好。
我使用正则表达式来过滤元素。
$('#nameVal').keyfilter(/[0-9a-zA-Z]/);
奇怪的是,这不仅允许使用字母数字字符,而且还允许输入'('。实际上,我传递给keyfilter的表达式并不重要,我无法停止'('被允许进入文本框。
还有其他人遇到过这个问题并且有解决方案吗?
答案 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。