JQuery: как отфильтровать несимвольные ключи при событии нажатия клавиши?
Я пробовал искать, но не знаю, какие условия искать.
Я использую jQuery и хотел бы использовать событие keypress в текстовом поле, но предотвращать все непечатаемые символы (т.е. Enter, ESC, клавиши со стрелками, backspace, tab, ctrl, insert, F1 - F12 и т.д.) от запуска события.
Есть ли простой способ определить, можно ли его печатать?
Ответ: qaru.site/info/141666/...
Ответы
Ответ 1
Выбранный ответ для этого вопроса не является полным. Он не обрабатывает случай нажатия клавиши символа в комбинации с ключом-модификатором (например, CTRL - A).
Попробуйте, например, ввести CTRL - A с помощью firefox с помощью следующего кода. Текущий ответ будет рассматривать его как символ:
HTML:
<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>
JavaScript:
$("input").keypress(function (e) {
if (e.which !== 0) {
alert(String.fromCharCode(e.which));
}
});
http://jsfiddle.net/4jx7v/
Примечание. Предупреждение не запускается при использовании некоторых браузеров (например, Chrome), поскольку они не запускают событие нажатия клавиши для несимметричных входов.
Лучшее решение может быть:
HTML:
<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>
JavaScript:
$("input").keypress(function (e) {
if (e.which !== 0 &&
!e.ctrlKey && !e.metaKey && !e.altKey
) {
alert(String.fromCharCode(e.which));
}
});
http://jsfiddle.net/hY5f4/
В этом случае предупреждение запускается только при нажатии A, а не CTRL - A для всех браузеров.
Ответ 2
<script>
$("input").keypress(function (e) {
if (e.which !== 0 &&
!e.ctrlKey && !e.metaKey && !e.altKey) {
alert(String.fromCharCode(e.which));
}
});
</script>
Кажется, отлично работает с jQuery 1.4.2, FF, IE, Chrome.
Чтобы вникать в беспорядок, который обрабатывает события JS-клавиатуры, см.
Безумие JavaScript: события клавиатуры
Обновлен для фильтрации комбинаций клавиш Ctrl, Meta и Alt в соответствии с комментариями Daniel.
Ответ 3
Проверка комбинаций клавиш не будет лучшим решением во всех случаях.
Например, если вы используете комбинации клавиш для ввода символа, который заблокирует событие onkeypress
, если это не так.
Попробуйте здесь, и вы увидите, что это не сработает: http://jsfiddle.net/4jx7v/
(На Mac, попробуйте alt + письмо и в Windows, попробуйте alt + ряд цифровых клавиш.)
Альтернативой этому было бы просто проверить, изменилось ли входное значение с предыдущего, вы точно знаете, что что-то было напечатано.
JavaScript:
var previousValue;
$("input").keypress(function (e) {
if (previousValue != $(this).val()) {
alert('Something has been typed.');
}
});
Ответ 4
Вы можете использовать регулярные выражения, такие как
$('something').keypress(function(e) {
if(e.match(YourRegularExpressionHere)) {
//do something
}
});
Это будет делать только то, что соответствует регулярному выражению.
Посмотрите на регулярные выражения.
http://www.regular-expressions.info/javascript.html