Javascript Opera 12'的任何解决方案;s输入类型=数字有效性行为?

Javascript Opera 12'的任何解决方案;s输入类型=数字有效性行为?,javascript,html,validation,opera,html5-validation,Javascript,Html,Validation,Opera,Html5 Validation,我刚刚和我的一个图书馆一起解决了一个问题,但归根结底,它与歌剧行为有关。现在,我还没有在这个问题上发现任何重大警告,所以我猜我遗漏了一些东西,或者有一个我不知道的解决方法 具体来说,以下面这样的简单代码为例: <input type="number" id="myNumber" /> 现在,如果用户输入“123a”,则: 此外:myInput.willValidate返回true和myInput.checkValidity()也返回true 那么,我如何在这个版本的Opera上检查

我刚刚和我的一个图书馆一起解决了一个问题,但归根结底,它与歌剧行为有关。现在,我还没有在这个问题上发现任何重大警告,所以我猜我遗漏了一些东西,或者有一个我不知道的解决方法

具体来说,以下面这样的简单代码为例:

<input type="number" id="myNumber" />
现在,如果用户输入“123a”,则:

此外:
myInput.willValidate
返回
true
myInput.checkValidity()
也返回
true

那么,我如何在这个版本的Opera上检查input type=number中的错误输入呢?(假设空字符串是且应该是有效输入。)


这将返回输入中输入的文本长度。使用它可以区分空输入和无效值。请记住为tab添加一个例外。

Firefox的行为方式似乎基本相同,不是吗?@Pointy您指的是特定版本的Firefox吗?我刚刚试用了32.0,虽然它也这么做了,但Firefox确实将
myInput.validity.badInput
设置为
true
,这足以检测问题,它还将
valid
设置为
false
“为什么有效:true?”参见@Knu我明白,如果无效,我应该无法获取值,但我仍然不明白为什么Opera会将
valid
设置为true(如果不是)。它给我的是内部值(空字符串)的validityStatus,而不是用户输入吗?是的,它给你的是表单发送时将使用的值的validityStatus。奇怪的是,我似乎找不到检索输入值的方法。
var myInput = document.getElementById('myNumber');
myInput.value // => "123"
myInput.validity // => { valid: true, typeMismatch: false, ... }
myInput.validity.badInput // undefined
var myInput = document.getElementById('myNumber');
myInput.value // => ""
myInput.validity // => { valid: true, typeMismatch: false, ... } -- why valid: true?
myInput.validity.badInput // undefined
element.focus();
document.execCommand("SelectAll");
window.getSelection().focusNode.selectionStart;