Я использовал следующую функцию jQuery, чтобы запретить пользователю вводить определенные ключи,

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

Он отлично работает в Mozilla, но не в Chrome.

Он выдает следующую ошибку,

Uncaught TypeError: Невозможно прочесть свойство "совпадение" неопределенного

Пожалуйста, помогите мне решить эту проблему.

0
Ahmed Syed 7 Май 2016 в 10:03

3 ответа

Лучший ответ

Не полагайтесь на свойство key события клавиатуры 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
RomanPerekhrest 7 Май 2016 в 08:05

Возможный обходной путь с использованием события 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/

0
guest271314 7 Май 2016 в 07:31
<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">
0
KittMedia 7 Май 2016 в 07:31