2014-12-20 2 views
2

Я просто искал проблему с помощью моей библиотеки, но это сводится к тому, чтобы быть чем-то связанным с поведением Opera. Теперь я не нашел больших предупреждений нигде в этом вопросе, поэтому я предполагаю, что у меня что-то не хватает или что есть обходной путь, о котором я просто не знаю.Любое обходное начало типа входа в Opera 12 = поведение действительности числа?

В частности, возьмем простой код, как это:

<input type="number" id="myNumber" /> 

В Opera 12.16, тип входа = число поддерживается, так что будет правильно отображать входной тип = число.

Если пользователь вводит действительное значение, скажем, "123", а затем:

Теперь, если пользователь вводит "123", затем:

var myInput = document.getElementById('myNumber'); 
myInput.value // => "" 
myInput.validity // => { valid: true, typeMismatch: false, ... } -- why valid: true? 
myInput.validity.badInput // undefined 

Кроме того: myInput.willValidate возвращает true и myInput.checkValidity() возвращает true.

Итак, как я могу проверить плохой вход в input type = number в этой версии Opera? (Рассмотрим пустую строку и должен быть действительный ввод.)

+0

Firefox, похоже, ведет себя примерно так же, нет? – Pointy

+0

@Pointy Вы имеете в виду определенную версию Firefox? Я просто попробовал с 32.0, и пока он делает то же самое, Firefox _does_ устанавливает 'myInput.validity.badInput' в' true', что достаточно для обнаружения проблемы, оно также устанавливает 'valid' в' false'. – Alpha

+0

"зачем справедливо: правда?" см. http://stackoverflow.com/a/18853513/248058 – Knu

ответ

2
element.focus(); 
document.execCommand("SelectAll"); 
window.getSelection().focusNode.selectionStart; 

Это возвращает длину текста, введенного на вход. Используя его, вы можете различать пустой ввод и недопустимое значение. Не забудьте добавить исключение для вкладки.

+0

Просто попробовал, работает как шарм. Благодаря! – Alpha