4

我有这个 jQuery 可以阻止按下回车键,并且我已经准备好接受一系列不允许的按键。

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

我想对|角色做类似的事情,但由于它是 220 的转变,我不需要停止\输入表单,我如何限制该角色或使用修饰键?(当然,也将在服务器端处理它)。

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

4

5 回答 5

6

keypress事件是关于字符,而不是键。您可以直接与( )keyCode的字符代码进行比较,无需担心 shift 键被按下(并且可能并非在所有键盘上都有)。"|""|".charCodeAt(0)

示例 - Live Copy | 来源

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 指出的那样,由于您已经在使用 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);
  }
});
于 2012-05-01T14:25:39.983 回答
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;
        }
    }
});​

查看演示

如果您仍然使用 jQuery,则可以使用以下inArray()方法:

$('.form input').bind('keypress', function(e) {
    var keys = [
        13, // enter
        124 // |
    ];
    return $.inArray(e.keyCode, keys) === -1;
});​
于 2012-05-01T14:27:53.763 回答
0

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

var keys = [13, "|".charCodeAt(0)];
$(".form input").keypress(function(e) {
    return $.inArray(e.keyCode, keys) === -1;
});
于 2012-05-01T14:24:10.247 回答
-2

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

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

于 2012-05-01T14:30:01.430 回答
-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;
    }
}
于 2012-05-01T14:21:47.987 回答