我需要在按键时避免文本框中的符号,但我的下面的代码不起作用它限制了所有关键事件。 。 。请帮帮我的朋友。 。
$('.GroupName').keypress(function (event) {
var keycode;
keycode = event.keyCode ? event.keyCode : event.which;
if (!(event.shiftKey == false && (keycode == 27 || keycode == 219 || keycode == 220 || keycode == 221 || keycode == 222 || (keycode >= 186 && keycode <= 192)))) {
event.preventDefault();
$('#error').attr('class', 'errorMessage');
$('#error').text("Enter Only Alphabets and Numbers. Symbols Are Not Allowed. ");
return false;
}
else {
$('#error').attr('class', ' display: none;');
$('#error').text("");
return true;
}
});
答案 0 :(得分:3)
我在键盘上找不到任何会使用这些密钥代码的东西,所以我创建了自己的例子。此演示限制了许多通常不会在消息中使用的符号。
通过将受限制的keyCodes添加到数组,然后使用if
检查它们,我减少了对indexOf
语句中条件的需求。另请注意,只需event.which
即可获得keyCode
。
<强> Live demo here (click). 强>
var restricted = [96, 126, 40, 41, 61, 91, 93, 123, 125, 92, 124, 59, 47, 60, 62];
$('.myInput').keypress(function (event) {
if (restricted.indexOf(event.which) !== -1) {
console.log('key restricted!');
event.preventDefault();
}
else {
console.log('key ok!');
}
});
答案 1 :(得分:1)
当您使用jQuery处理关键事件时,event.which
属性会为您规范化,因此无需测试event.keyCode
。对于keypress
事件,如the jQuery documentation中所述,event.which
实际上是字符代码,因此无需测试event.shiftKey
- 您已经根据是输入大写还是小写字母获取不同的代码。
同样在你想要只允许字母和数字的情况下,测试有效字符比列出无效字符的字符代码更容易。
所以你的功能可以简化:
$('.GroupName').keypress(function (event) {
var charcode = event.which;
if (charcode >= 65 && charcode <= 90 // uppercase letters
|| charcode >= 97 && charcode <= 122 // lowercase letters
|| charcode >= 48 && charcode <= 57) { // digits
// valid character entered
$('#error').hide().text("");
} else {
event.preventDefault();
$('#error').show().text("Enter only letters and numbers. Symbols are not allowed.");
}
});
或者这是一种根本不测试任何字符代码的方法,它通过正则表达式测试输入的字符是否有效:
if (/[a-z\d]/i.test(String.fromCharCode(event.which))) {
// valid
演示:http://jsfiddle.net/sVzR4/1/
另请注意您所拥有的一行:
$('#error').attr('class', ' display: none;');
...无法隐藏#error
字段,因为将display:none
设置为类是没有意义的 - 您可能想要{{1但是,使用.css('display', 'none')
和.hide()
更简单。
请注意,对关键事件进行验证是不够的。用户可以通过浏览器的编辑菜单粘贴文本来编辑字段,他们可以拖动'n'用鼠标掉落。所以你真的应该在关键事件的.show()
上验证(或代之)。