停止键入表单中的字符

时间:2012-05-01 14:17:51

标签: javascript jquery forms javascript-events keyboard

我有这个jquery阻止输入键被按下,我已经准备接受一系列不允许的按钮了。

    $('.form input').bind('keypress', function(e) {
        var keys = [13];
        for (var i = keys.length; i--;){
            if(e.keyCode===keys[i]){
                return false;
            }
        }
    });

我想用|字符做类似的事情,但因为它是220的移位而我不需要阻止\从输入表单,我如何限制该字符或使用修饰键? (当然也将在服务器端处理它)。

我也知道特殊字符的键盘布局可能因键盘到键盘而有所不同,因此可能需要关注结果字符而不是键本身(不完全确定),但我不想引入大量的开销

5 个答案:

答案 0 :(得分:6)

keypress事件是关于字符,而非关键字。您可以直接将keyCode"|""|".charCodeAt(0))的字符代码进行比较,无需担心Shift键已关闭(并且可能不在所有键盘上)。< / p>

示例 - live copy | source

HTML:

<p>Try to type | in the box below.</p>
<input id="theInput" type="text" size="80">

JavaScript的:

jQuery(function($) {

  var keys = [13, "|".charCodeAt(0)];
  $("#theInput").keypress(function(e) {
    var index;

    for (index = 0; index < keys.length; ++index) {
      if (keys[index] === e.keyCode) {
        display("Denied!");
        return false;
      }
    }
  });

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

或者bažmegakapa points out,因为您已经在使用jQuery,所以可以使用其inArray函数:

jQuery(function($) {

  var keys = [13, "|".charCodeAt(0)];
  $("#theInput").keypress(function(e) {
    if ($.inArray(e.keyCode, keys) !== -1) {
      display("Denied!");
      return false;
    }
  });

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

答案 1 :(得分:4)

管道的密钥代码是124,所以这应该可以正常工作:

$('.form input').bind('keypress', function(e) {
    var keys = [13, 124];
    for (var i = keys.length; i--;){
        if(e.keyCode===keys[i]){
            return false;
        }
    }
});​

Check out the demo

如果你正在使用jQuery,你可以使用inArray()方法:

$('.form input').bind('keypress', function(e) {
    var keys = [
        13, // enter
        124 // |
    ];
    return $.inArray(e.keyCode, keys) === -1;
});​

答案 2 :(得分:0)

总之,最好的解决方案是:

var keys = [13, "|".charCodeAt(0)];
$(".form input").keypress(function(e) {
    return $.inArray(e.keyCode, keys) === -1;
});

答案 3 :(得分:-2)

您可以检查e.shiftKey是否属实,但是这需要您修改数组。就个人而言,我会使用类似的东西:

var mod = {
    NONE:0,
    SHIFT:1,
    CTRL:2,
    ALT:4
};
var keys = [
    [13,mod.NONE], // enter, no mod
    [220,mod.SHIFT] // \ with Shift = |
];
for( var i=keys.length; i--;) {
    if( e.keyCode === keys[i][0] && (e.shiftKey + 2*e.ctrlKey + 4*e.altKey) === keys[i][1]) {
        return false;
    }
}

答案 4 :(得分:-2)

如果您只是想要不包含特定字符(甚至字符集),我认为更好的方法是从表单值中删除任何受限制的字符。

$('.form input').keyup(function(e){ $(this).val( $(this).val().replace("|", "" ) ); });