Обновленное решение для улучшения взаимодействия с пользователем, которое решает проблему копирования и вставки и заменяет устаревший атрибут keyCode:
HTML
<input type="tel">
JQuery
$('[type=tel]').on('change', function(e) {
$(e.target).val($(e.target).val().replace(/[^\d]/g, ''))
})
$('[type=tel]').on('keypress', function(e) {
keys = ['0','1','2','3','4','5','6','7','8','9']
return keys.indexOf(event.key) > -1
})
подробности:
Прежде всего, типы ввода :
number
показывает стрелки вверх / вниз, уменьшающие фактическое пространство ввода, я считаю их уродливыми и полезными, только если число представляет количество (такие вещи, как телефоны, коды городов, идентификаторы ... не нуждаются в них)
tel
обеспечивает аналогичные проверки числа без стрелок в браузере
Использование [номер / телефон] также помогает отображать цифровую клавиатуру на мобильных устройствах.
Для проверки JS мне понадобились 2 функции: одна для обычного пользовательского ввода (нажатие клавиши), а другая для исправления (изменения) копирования и вставки, другие комбинации дали бы мне ужасный пользовательский опыт.
Я использую более надежный KeyboardEvent.key вместо , который теперь устарел KeyboardEvent.charCode
И в зависимости от поддержки вашего браузера вы можете рассмотреть возможность использования Array.prototype.includes () вместо плохо названного Array.prototype.indexOf () (для истинных / ложных результатов )