Как я могу получить «реальное» значение <input type="number">
поля?
У меня есть input
коробка, и я использую новый тип ввода HTML5 number
:
<input id="edQuantity" type="number">
В основном это поддерживается в Chrome 29:
Что мне теперь нужно, так это возможность читать «сырое» значение, введенное пользователем в поле ввода. Если пользователь ввел номер:
тогда edQuantity.value = 4
и все хорошо.
Но если пользователь вводит недопустимый текст, я хочу покрасить поле ввода красным цветом:
К сожалению, для type="number"
поля ввода, если значение в текстовом поле не является числом, value
возвращается пустая строка:
edQuantity.value = "" (String);
(как минимум в Chrome 29)
Как я могу получить "сырое" значение элемента <input type="number">
управления?
Я попытался просмотреть список других свойств поля ввода Chrome:
я не видел ничего похожего на фактический ввод.
Я также не мог найти способ узнать, «пусто» ли поле или нет. Возможно, я мог предположить:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Примечание . Все, что находится после горизонтальной линейки, можно игнорировать; это просто наполнитель для обоснования вопроса. Также: не путайте пример с вопросом. Люди могли бы ответить на этот вопрос , по причинам , другие , чем окрашивать коробки красных (один пример: преобразование текста "four"
в латинском "4"
символ во время мероприятия ONBLUR)
Как я могу получить "сырое" значение элемента <input type="number">
управления?
Бонусное чтение
источник
number
это не тот тип ввода, который вы ищете; используйте обычныйtext
ввод.validity
состоянии - я бы ожидать ,typeMismatch
но я не проверял сам.blah
неверный номер».Ответы:
Согласно WHATWG , вы не сможете получить значение, если это не допустимый числовой ввод. Алгоритм очистки числового поля ввода говорит, что браузер должен установить значение в пустую строку, если ввод не является допустимым числом с плавающей запятой.
Указывая type (
<input type="number">
), вы просите браузер сделать за вас некоторую работу. Если, с другой стороны, вы хотите иметь возможность захватывать нечисловой ввод и что-то делать с ним, вам придется полагаться на старое проверенное и достоверное поле ввода текста и самостоятельно анализировать содержимое.W3 имеет те же характеристики и добавляет:
источник
<input type="number">
), вы просите браузер сделать за вас некоторую работу. Лично я просто просил мобильные браузеры отображать цифровую клавиатуру и получил подтверждение как неприятную дополнительную вещь. Большинство этих проблем проистекает из того факта, чтоtype
атрибут определяет как правила проверки, так и правила о том, какой механизм ввода отображать, но вполне возможно захотеть показать цифровую клавиатуру мобильным пользователям, не желая также, чтобы проверка номера применялась к пользователям настольных компьютеров. HTML 5.1 в конечном итоге решит эту проблему с помощьюinputmode
атрибута.Это не дает ответа на вопрос, но полезный обходной путь - проверить
Объект
ValidityState
объекта дает подсказку о том, что ввел пользователь. Рассмотримtype="number"
вход с amin
иmax
установитеМы всегда хотим использовать
.validity.valid
.Другие свойства предоставляют только бонусную информацию:
Перед использованием убедитесь, что браузер поддерживает проверку HTML5:
бонус
У Спадли есть полезный ответ, который он удалил:
источник
.validity
свойство, но не обрабатывает его правильно.valid
?!typeMismatch
может иметь смысл, но это только для типов электронной почты или URL…required
).badInput
добавлен 20.11.2012 . Но никто не должен смотреть,badInput
верен ли ввод; они должны смотреть.valid
. Возможно (и правильно),.badInput
что он будет ложным, но все равно будет иметь недопустимый ввод..valid
определяется как отсутствие каких-либо ошибок проверки (например, несоответствия, переполнения, потери значимости), из которых.badInput
только один вид ошибок. Обратите внимание на диаграмму выше, где указано значение.badInput
false, но ввод все еще недействителен.источник
Отслеживайте все нажатые клавиши на основе их кодов клавиш
Я полагаю, что можно было бы прослушивать события нажатия клавиш и хранить массив всех введенных символов на основе их кодов клавиш. Но это довольно утомительная задача и, вероятно, подвержена ошибкам.
http://unixpapa.com/js/key.html
Выберите ввод и получите выделение в виде строки
Все кредиты на: int32_t
источник
Delete
,Backspace
,Ctrl+X
,Ctrl+V
,Right-click-cut
,Right-click-paste
.