Справочник API
.keypress() в jQuery
Содержание статьи
-
Категории: Events › Keyboard Events
Устанавливает (или вызывает) обработчики JavaScript события keypress, когда последовательно нажата (keydown) и отпущена (keyup) клавиша на клавиатуре, для всех элементов набора jQuery.
Синтаксис и описание:
Добавлено в jQuery 1.0.keypress( handler( eventObject ) )
Добавлено в jQuery 1.4.3.keypress( [ eventData ,] handler( eventObject ) )
Добавлено в jQuery 1.0.keypress( )
Команда .keypress() — сокращённый вариант события keypress, которое браузер генерировал при вводе символа. В отличие от .keydown(), событие keypress не срабатывает для служебных клавиш без символа (Shift, Ctrl, Escape, стрелки, Delete) и не имело единого описания в спецификациях — поведение отличалось между браузерами.
Возвращаемое значение: (объект) Набор jQuery.
Параметры:
eventData – (объект) Данные, доступные обработчику через event.data.
handler( eventObject ) – Функция-обработчик события keypress. В event.which для этого события — код символа, а не код клавиши (например, для строчной "a" — 97, а не 65, как в keydown/keyup).
Примечание:
Событие keypress объявлено устаревшим и в спецификации DOM, и в документации MDN — браузеры продолжают его поддерживать, но новый код рекомендуется писать на keydown или на событии beforeinput/input, у которых предсказуемое поведение и явная поддержка международного ввода (составные раскладки, IME).
Примечание:
Для отслеживания фактического текста, который получится в поле после ввода (включая вставку из буфера обмена и автозамену), надёжнее нативное событие input — оно срабатывает после того, как значение поля уже изменилось, а не до этого, как keypress.
В jQuery 3.x и 4.0:
Шорткат .keypress() deprecated в jQuery с 3.3, но не удалён — работает в 3.7.1 и 4.0 (замена —
.on("keypress", handler)). Отдельно от статуса в jQuery, само событие keypress помечено устаревшим на уровне браузерных спецификаций и MDN — для нового кода предпочтительны keydown или beforeinput/input, независимо от версии jQuery.
Примеры:
Устаревший, но пока рабочий вариант: запретить ввод цифр в текстовое поле.
$('#name').keypress(function(event) { if (event.which >= 48 && event.which <= 57) { event.preventDefault(); } });Тот же результат через современный .on().
$('#name').on('keypress', function(event) { if (event.which >= 48 && event.which <= 57) { event.preventDefault(); } });Более надёжная альтернатива без keypress: проверять уже введённое значение по событию input, что корректно работает и при вставке текста мышью.
$('#name').on('input', function() { $(this).val($(this).val().replace(/[0-9]/g, '')); });