如何防止用户输入chrome中的特定键?

时间:2016-05-07 07:03:07

标签: jquery

我使用了以下jQuery函数来阻止用户输入特定的密钥,

$('#prod_name_en').keypress(function (e) {
if (e.key.match(/[!@#]+/))
    {
        e.preventDefault();
    }
});

它在mozilla中运行良好,但在chrome中运行良好。

抛出以下错误,

  

未捕获的TypeError:无法读取属性'匹配'未定义的

请帮我解决此问题。

3 个答案:

答案 0 :(得分:1)

不要依赖JQuery的键盘事件属性。它可能无法正常工作。
有两种不同类型的代码:键盘代码(表示用户按下的键盘上的键的数字)和字符代码(表示Unicode字符的数字)。 IE仅将字符代码存储在keyCode中,而所有其他浏览器将其存储在which中。有些(但不是全部)浏览器也会将其存储在charCode和/或keyCode中。
要获得字符值 - 通过String.formCharCode方法使用字符代码:

$('#prod_name_en').on('keypress', function(e){
    var keyCode = e.keyCode || e.charCode || e.which; // cross-browser key-code detection
    if (String.fromCharCode(keyCode).match(/[!@#]+/)) e.preventDefault();
});

答案 1 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

<script>

$(document).ready(function(){


      $('#prod_name_en').keypress(function (e) {

            // 97 code for a and 98 for b

            if(e.keyCode==97 || e.keyCode==98)
                e.preventDefault();

        });
    });

</script>

<input type="text" id="prod_name_en">

答案 2 :(得分:0)

使用String.prototype.slice()input事件,event.target.value

的可能解决方法

$("#prod_name_en").on("input", function(e) {
  var value = e.target.value;
  if (value.slice(-1).match(/[!@#]+/g)) {
    e.target.value = value.slice(0, -1);
    e.preventDefault();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input type="text" id="prod_name_en" value="" />

jsfiddle https://jsfiddle.net/4rmsjctf/1/