块符号键按jquery不起作用

时间:2014-01-02 06:05:35

标签: javascript jquery jquery-ui javascript-events

我需要在按键时避免文本框中的符号,但我的下面的代码不起作用它限制了所有关键事件。 。 。请帮帮我的朋友。 。

 $('.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;
            }
        });

2 个答案:

答案 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.");
    }
});

演示:http://jsfiddle.net/sVzR4/

或者这是一种根本不测试任何字符代码的方法,它通过正则表达式测试输入的字符是否有效:

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()上验证(或代之)。