Есть ли быстрый способ установить ввод текста HTML ( <input type=text />
), чтобы разрешить только числовые нажатия клавиш (плюс '.')?
javascript
jquery
html
Julius A
источник
источник
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Ответы:
Примечание. Это обновленный ответ. Комментарии ниже относятся к старой версии, которая путалась с кодами клавиш.
JavaScript
Попробуйте сами на JSFiddle .
Вы можете отфильтровать входные значения текста
<input>
с помощью следующейsetInputFilter
функции (поддерживает «Копировать + Вставить», «Перетаскивание», «Горячие клавиши», операции с контекстным меню, неиспользуемые клавиши, положение каретки, различные раскладки клавиатуры и все браузеры, начиная с IE 9 ) :Теперь вы можете использовать
setInputFilter
функцию для установки входного фильтра:Посмотрите демонстрацию JSFiddle для большего количества примеров входного фильтра. Также обратите внимание, что вы все равно должны выполнить проверку на стороне сервера!
Машинопись
Вот версия TypeScript этого.
JQuery
Существует также версия JQuery этого. Смотрите этот ответ .
HTML 5
HTML 5 имеет собственное решение с
<input type="number">
(см. Спецификацию ), но обратите внимание, что поддержка браузера варьируется:step
,min
иmax
атрибуты.e
иE
в поле. Также посмотрите этот вопрос .Попробуйте сами на w3schools.com .
источник
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Используйте этот DOM
И этот сценарий
источник
Я искал долго и упорно за хороший ответ на это, и мы отчаянно нуждаемся
<input type="number"
, но мало того , что эти два являются наиболее лаконичными способами , которыми я мог бы придумать:Если вам не нравится недопустимый символ, отображаемый в течение доли секунды перед удалением, мой метод ниже. Обратите внимание на многочисленные дополнительные условия, это позволяет избежать отключения всех видов навигации и горячих клавиш. Если кто-нибудь знает, как это компактифицировать, сообщите нам!
источник
/[^\d+]/
и оно будет работать, удерживая нажатой кнопку/[^\d]+/
. Хорошее решение, хотя. Также @ user235859.
тоже хотел разрешить . Вы действительно должны сделать это/[^0-9.]/g
Вот простой, который учитывает ровно один десятичный знак, но не более:
источник
И еще один пример, который прекрасно работает для меня:
Также прикрепить к событию нажатия клавиши
И HTML:
Вот пример jsFiddle
источник
HTML5 имеет
<input type=number>
, что звучит правильно для вас. В настоящее время только Opera поддерживает его изначально, но есть проект, который имеет реализацию JavaScript.источник
type=number
том, что IE9 не поддерживаетсяtype=number
том, чтобы разрешитьe
символ, потому что он считаетсяe+10
числом. Вторая проблема заключается в том, что вы не можете ограничить максимальное количество символов на входе.Большинство ответов здесь имеют слабость использования ключевых событий .
Многие ответы ограничат вашу способность делать выбор текста с помощью клавиатурных макросов, копирования + вставки и более нежелательного поведения, другие, похоже, зависят от конкретных плагинов jQuery, которые убивают мух с помощью пулеметов.
Это простое решение, кажется, лучше всего подходит для кроссплатформенности, независимо от механизма ввода (нажатие клавиш, копирование + вставка, щелчок правой кнопкой мыши на копирование + вставка, преобразование речи в текст и т. Д.). Все макросы клавиатуры для выделения текста по-прежнему будут работать, и это даже ограничит возможность установки нечисловых значений скриптом.
источник
replace(/[^\d]+/g,'')
заменить все не-цифры пустой строкой. Модификатор «i» (без учета регистра) не требуется./[^\d,.]+/
Я решил использовать комбинацию двух ответов, упомянутых здесь, т.е.
<input type="number" />
а также
<input type="text" onkeypress="return isNumberKey(event);">
источник
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 поддерживает регулярные выражения, поэтому вы можете использовать это:
Предупреждение: некоторые браузеры пока не поддерживают это.
источник
<input type=number>
.+
значит в шаблоне атрибут?JavaScript
дополнительно вы можете добавить запятую, точку и минус (, .-)
HTML
источник
Так просто....
// В функции JavaScript (можно использовать HTML или PHP).
В вашей форме введите:
С входом макс. (Это выше позволяет 12-значный номер)
источник
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 решения:
Используйте средство проверки формы (например, с плагином проверки jQuery )
Выполните проверку во время события onblur (т.е. когда пользователь покидает поле) поля ввода с помощью регулярного выражения:
источник
var regExpr = /^\d+(\.\d*)?$/;
.123
(вместо0.123
), например?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Более безопасный подход заключается в проверке значения ввода, а не в перехвате нажатий клавиш и попытке фильтрации кодов клавиш.
Таким образом, пользователь может свободно использовать стрелки на клавиатуре, клавиши-модификаторы, клавишу возврата, удалять, использовать нестандартные клавиши клавиатуры, использовать мышь для вставки, использовать перетаскивание текста, даже использовать специальные возможности ввода.
Скрипт ниже допускает положительные и отрицательные числа
РЕДАКТИРОВАТЬ: я удалил свой старый ответ, потому что я думаю, что он устарел сейчас.
источник
Вы можете использовать шаблон для этого:
Здесь вы можете увидеть полные советы по интерфейсу мобильного сайта .
источник
Пожалуйста, найдите нижеупомянутое решение. В этом пользователь может быть в состоянии ввести только
numeric
значение, также пользователь не может быть в состоянииcopy
,paste
,drag
иdrop
на входе.Дайте мне знать, если это не работает.
источник
Если вы хотите предложить устройству (возможно, мобильному телефону) между алфавитным или цифровым, вы можете использовать
<input type="number">
.источник
Еще один пример, где вы можете добавить только цифры в поле ввода, не буквы
источник
Короткая и приятная реализация, использующая jQuery и replace () вместо того, чтобы смотреть на event.keyCode или event.which:
Единственный небольшой побочный эффект, что набранная буква появляется на мгновение и CTRL / CMD + A, кажется, ведет себя немного странно.
источник
input type="number"
является атрибутом HTML5В другом случае это поможет вам:
источник
var charCode = (evt.which) ? evt.which : evt.keyCode;
Код JavaScript:
HTML код:
отлично работает, потому что код клавиши возврата равен 8, а выражение регулярного выражения этого не позволяет, так что это простой способ обойти ошибку :)
источник
Простой способ решить эту проблему - реализовать функцию jQuery для проверки с помощью регулярных выражений символов, напечатанных в текстовом поле, например:
Ваш HTML-код:
И функция JS, используя JQuery
источник
Просто другой вариант с использованием jQuery
источник
просто используйте type = "number", теперь этот атрибут поддерживается в большинстве браузеров
источник
--1
(2 минус символы до 1).Вы также можете сравнить входное значение (которое по умолчанию рассматривается как строковое) с самим значением в виде числа, например:
Тем не менее, вам нужно привязать это к событию, как keyup и т. Д.
источник
источник
Я видел отличные ответы, но мне они нравятся как можно меньше и проще, поэтому, возможно, кто-то от этого выиграет. Я хотел бы использовать JavaScript
Number()
иisNaN
функциональность, как это:Надеюсь это поможет.
источник
Используйте этот DOM:
И этот скрипт:
... ИЛИ этот скрипт, без indexOf, использующий два
for
...Я использовал атрибут onkeydown вместо onkeypress, потому что атрибут onkeydown проверяется перед атрибутом onkeypress. Проблема будет в браузере Google Chrome.
С атрибутом «onkeypress» TAB будет неуправляемым с «protectDefault» в Google Chrome, однако с атрибутом «onkeydown» TAB станет управляемым!
Код ASCII для TAB => 9
Первый скрипт имеет меньше кода, чем второй, однако, массив символов ASCII должен иметь все ключи.
Второй скрипт намного больше первого, но массиву не нужны все ключи. Первая цифра в каждой позиции массива - это количество раз, которое будет прочитана каждая позиция. Для каждого чтения будет увеличен 1 до следующего. Например:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
В случае числовых ключей только 10 (0 - 9), но если бы они были 1 миллион, не было бы смысла создавать массив со всеми этими ключами.
Коды ASCII:
источник
Это улучшенная функция:
источник
Лучший способ (разрешить ВСЕ типы чисел - реальное отрицательное, реальное положительное, iinteger отрицательное, целое положительное):
источник
Это расширенная версия решения geowa4 . Поддерживает
min
иmax
атрибуты. Если число выходит за пределы диапазона, будет показано предыдущее значение.Вы можете проверить это здесь.
Применение:
<input type=text class='number' maxlength=3 min=1 max=500>
Если входы динамические, используйте это:
источник