Каков наилучший способ ограничить «числовой» ввод только для текстовых полей?
Я ищу то, что позволяет десятичные точки.
Я вижу много примеров. Но еще предстоит решить, какой из них использовать.
Обновление от Правин Джеганатан
Больше никаких плагинов, jQuery реализовал свой собственный jQuery.isNumeric()
добавленный в v1.7. Смотрите: https://stackoverflow.com/a/20186188/66767
jquery
validation
isnumeric
wenbert
источник
источник
Ответы:
Обновить
Для этого есть новое и очень простое решение:
Посмотрите этот ответ или попробуйте сами на JSFiddle .
jquery.numeric плагин
Я успешно реализовал много форм с помощью плагина jquery.numeric .
Кроме того, это работает и с textareas!
Однако обратите внимание, что Ctrl + A, Copy + Paste (через контекстное меню) и Drag + Drop не будут работать должным образом.
HTML 5
Благодаря более широкой поддержке стандарта HTML 5 мы можем использовать
pattern
атрибут иnumber
тип дляinput
элементов, чтобы ограничить ввод только чисел. В некоторых браузерах (в частности, в Google Chrome) он также позволяет ограничивать вставку нечислового содержимого. Более подробная информация оnumber
других новых типах ввода доступна здесь .источник
allowDecimal
возможность всякий раз, когда я хочу разрешить только целочисленные значения ... источник очень прост и хорошо написан.type="number"
.Если вы хотите ограничить ввод (в отличие от проверки), вы можете работать с ключевыми событиями. что-то вроде этого:
И:
Это сразу дает пользователю знать, что он не может вводить буквенные символы и т. Д., А не позже, на этапе проверки.
Вы все равно захотите проверить, потому что ввод может быть заполнен путем вырезания и вставки мышью или, возможно, автозаполнением формы, которое может не вызывать ключевые события.
источник
$doc.on('keyup blur input propertychange', 'input[name="price"]', function(){$(this).val($(this).val().replace(/[^0-9\.]/g,''));});
Я думал, что лучшим ответом был тот, что выше, чтобы просто сделать это.
но я согласен, что немного неприятно, что клавиши со стрелками и кнопка удаления привязывают курсор к концу строки (и из-за этого он был отброшен мне при тестировании)
Я добавил в простом изменении
таким образом, если есть какое-либо нажатие кнопки, которое не приведет к изменению текста, просто игнорируйте его. При этом вы можете нажимать стрелки и удалять, не переходя до конца, но это очищает любой нечисловой текст.
источник
keypress
может быть использовано для дальнейшего упрощения этого, потому что, по-видимому,keyup
иkeydown
триггер на любой клавише клавиатуры, в то время какkeypress
только триггеры на «символьные» клавиши (таким образом, не запускаются на клавиатуре и клавиши удаления). См. Этот ответ для справки: stackoverflow.com/a/1367720/1298685Плагин jquery.numeric содержит некоторые ошибки, о которых я уведомил автора. Он позволяет использовать несколько десятичных знаков в Safari и Opera, и вы не можете вводить клавишу Backspace, клавиши со стрелками или несколько других управляющих символов в Opera. Мне нужен был положительный целочисленный ввод, так что в итоге я просто написал свой собственный.
источник
Больше нет плагинов, jQuery реализовал свой собственный jQuery.isNumeric (), добавленный в v1.7.
Образцы результатов
Вот пример того, как связать isNumeric () с прослушивателем событий
источник
var v = this.value;
поменяй его наvar v = this.value.replace(/,/g,'');
. Числа, такие как21,345,67.800
тоже считаются.$(document).on('keyup keypress', '#somethingSomething', function(){ var aValue = $(this).val(); if($.isNumeric(aValue) === false){ $(this).val(aValue.slice(0,-1)); } });
Плагин numeric (), упомянутый выше, не работает в Opera (вы не можете возвращать, удалять или даже использовать клавиши «назад» или «вперед»).
Код ниже как в JQuery, так и в Javascript будет отлично работать (и это всего две строки).
JQuery:
Javascript:
Конечно, это только для чисто числового ввода (плюс клавиши «backspace», «delete», «вперед / назад»), но его можно легко изменить, добавив точки и минус символы.
источник
Вы можете использовать плагин Validation с его методом number () .
источник
Javascript Подход
JQuery подход
ОБНОВИТЬ
Приведенные выше ответы предназначены для наиболее распространенного варианта использования - проверки ввода в виде числа.
источник
Ниже приводится то, что я использую, чтобы буквально блокировать нажатия клавиш. Это позволяет только цифры 0-9 и десятичную точку. Легко реализовать, не много кода и работает как шарм:
источник
charCode != 46
из оператора if. Отличный ответ!В качестве небольшого улучшения этого предложения вы можете использовать плагин Validation с его методами number () , цифрами и диапазоном . Например, следующее гарантирует, что вы получите положительное целое число от 0 до 50:
источник
Вы не видите магическое появление и исчезновение алфавитов при нажатии клавиш. Это работает и на мышиную пасту.
источник
/[^0-9.]/g
Сначала я попытался решить эту проблему с помощью jQuery, но меня не порадовали нежелательные символы (не цифры), которые фактически появляются в поле ввода перед удалением из keyup.
В поисках других решений я нашел это:
Целые числа (неотрицательные)
Источник: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example Живой пример: http://jsfiddle.net/u8sZq/
Десятичные точки (неотрицательные)
Чтобы разрешить одну десятичную точку, вы можете сделать что-то вроде этого:
Источник: Просто написал это. Кажется, работает. Живой пример: http://jsfiddle.net/tjBsF/
Другие настройки
Некоторые вещи, которые могут вас заинтересовать:
Упущения
Я знаю, что заголовок запрашивает решения jQuery, но, надеюсь, кто-то найдет это полезным в любом случае.
источник
Спасибо за пост Дейва Аарона Смита
Я отредактировал ваш ответ, чтобы принять десятичную точку и число из числовой секции. Эта работа идеально подходит для меня.
источник
И примените это ко всем входам, которые вы хотите:
источник
HTML5 поддерживает номер типа ввода с глобальной поддержкой браузеров 88% + согласно CanIUse по состоянию на октябрь 2015 года.
Это не связано с JQuery, но преимущество в том, что на мобильных телефонах клавиатура Android будет оптимизирована для ввода цифр.
В качестве альтернативы можно использовать тип ввода текста с новым параметром «шаблон». Подробнее в спецификации HTML5.
Я думаю, что это лучше, чем решение jquery, так как в данном вопросе решение jquery не поддерживает разделитель тысяч. Если вы можете использовать HTML5.
JSFiddle: https://jsfiddle.net/p1ue8qxj/
источник
Эта функция делает то же самое, использует некоторые идеи выше.
источник
/ * это моя кросс-браузерная версия Как разрешить только числовые (0-9) в поле ввода HTML, используя jQuery?
* /
источник
Просто запустите содержимое через parseFloat (). Он вернется
NaN
при неверном вводе.источник
Вы можете использовать autoNumeric от decorplanit.com . У них есть хорошая поддержка числовых, а также валюты, округления и т. Д.
Я использовал в среде IE6, с некоторыми изменениями CSS, и это был разумный успех.
Например, класс css
numericInput
может быть определен, и его можно использовать для украшения ваших полей масками числового ввода.адаптировано с сайта autoNumeric:
источник
Я думаю, что это хороший способ решения этой проблемы, и он чрезвычайно прост:
Пример: JSFiddle
Сценарии покрыты
Большинство подобных рекомендаций здесь не соответствуют хотя бы одному из них или требуют большого количества кода, чтобы охватить все эти сценарии.
home
,end
и этиarrow
ключи.delete
иbackspace
использоваться при любом индексе.keyup
событие не используется.Сценарии провалились
0.5
и удаляя только ноль, работать не будет. Это можно исправить, изменив регулярное выражение на,/^[0-9]*\.?[0-9]*$/
а затем добавив событие размытия, чтобы добавить a,0
когда текстовое поле начинается с десятичной точки (при желании). Посмотрите этот продвинутый сценарий, чтобы лучше понять, как это исправить.Plugin
Я создал этот простой плагин jquery, чтобы сделать это проще:
источник
Лучший способ - проверять контекст текстового поля всякий раз, когда оно теряет фокус.
Вы можете проверить, является ли содержимое «числом», используя регулярное выражение.
Или вы можете использовать плагин проверки, который в основном делает это автоматически.
источник
Проверьте этот код поиска для использования базы данных:
источник
Вот фрагмент, который я только что сделал (используя часть кода Питера Мортенсена / Кейта Бентрупа) для проверки целочисленного процента в текстовом поле (требуется jQuery):
Этот код:
Я надеюсь, что это помогает нуждающимся.
источник
Нашел отличное решение здесь http://ajax911.com/numbers-numeric-field-jquery/
Я просто изменил «keyup» на «keydown» согласно моему требованию
источник
Если вы используете HTML5, вам не нужно идти на все, чтобы выполнить проверку. Просто используйте -
Атрибут step позволяет использовать десятичную точку.
источник
Другой способ сохранить позицию каретки на входе:
Преимущества:
Плункер: Демо работает
источник
Я только что нашел еще лучший плагин. Дает вам гораздо больше контроля. Скажем, у вас есть DOB поле где вам нужно, чтобы оно было числовым, но также допускало использование символов «/» или «-».
Работает отлично!
Проверьте это на http://itgroup.com.ph/alphanumeric/ .
источник
Этот код работал очень хорошо для меня, мне просто нужно было добавить 46 в массиве controlKeys, чтобы использовать точку, хотя я не думаю, что это лучший способ сделать это;)
источник
Я использовал это, с хорошими результатами ..
источник
Это очень просто, у нас уже есть встроенная функция javascript "isNaN".
источник