Javascript 输入类型=";“数字”;和IE10+;
我正在尝试使用HTML5Javascript 输入类型=";“数字”;和IE10+;,javascript,html,internet-explorer,validation,input,Javascript,Html,Internet Explorer,Validation,Input,我正在尝试使用HTML5元素对数字字段进行Javascript客户端验证。还有服务器端验证,所以我们不要对此大喊大叫……;) 我希望提供三种验证状态级别:绿色表示定义范围内的有效数字,黄色表示超出范围的数字或空字段,红色表示非数字输入 我的问题是,对于非数字输入,IE11(我相信还有IE10)似乎返回一个空白的.value属性。也就是说,如果我在框中键入abc,.value是“。这使我无法区分黄色(空白)和红色(垃圾) 我知道存在新的.valueAsNumber属性,但这并不能完全帮助我,因为我
元素对数字字段进行Javascript客户端验证。还有服务器端验证,所以我们不要对此大喊大叫……;)
我希望提供三种验证状态级别:绿色表示定义范围内的有效数字,黄色表示超出范围的数字或空字段,红色表示非数字输入
我的问题是,对于非数字输入,IE11(我相信还有IE10)似乎返回一个空白的.value
属性。也就是说,如果我在框中键入abc
,.value
是“
。这使我无法区分黄色(空白)和红色(垃圾)
我知道存在新的.valueAsNumber
属性,但这并不能完全帮助我,因为我无法区分其他浏览器上的空属性和IE10/11上的非数字属性(.value
为空,.valueAsNumber
为NaN
)
有人解决了这个问题吗?我不想求助于跟踪按键,我想支持恢复为type=“text”
且没有.valueAsNumber
的旧浏览器(回到IE8)。先谢谢你
编辑:只是澄清一下(希望如此),我的问题是IE10/11中
.value
和.valueAsNumber
的输出不允许我区分无输入和非数字输入。我希望能够区分这两种情况,而无需浏览器嗅探和返回到type=“text”
您是否可以为输入类分配一个合理的默认值(零?)?那么您就不需要在代码中进行区分了
在我的书中,实用主义总是胜过独创性;) 继续,在支持它的浏览器中使用
valueAsNumber
var
coerced,
value,
input = yourInput;
if(typeof input.valueAsNumber !== "undefined") {
value = (isNaN(input.valueAsNumber)) ? "dummystring" : input.valueAsNumber;
} else {
value = input.value;
}
if(typeof input.value === "string") {
//non-numeric
} else {
coerced = +input.value;
//do validation on coerced - it is now a number
}
支持<代码> ValueStAs/<代码>的浏览器,它们也支持<代码>输入[type=编号] < /C> >,因此这将解决您的问题。
为什么不考虑从允许空白改为使用超出您的范围的一些默认值,例如“代码> 0”/代码>,您可以检测并做出不同的行为,然后,这将使您能够始终将所有内容强制转换为数字,以便您始终只能使用数字?(显然,您仍然应该进行服务器端验证)谢谢,但这不是我的问题。我无法在IE11上找到区分空白和非数字输入的方法,即使使用.value
和.valueAsNumber
,因为.value
在这两种情况下都是空白的。如果输入的值是空字符串,那么我的测试表明IE11为.valueAsNumber
返回NaN
,而不是空白,不管空白是什么。是的,这就是问题所在。空输入字段为.value
和.valueAsNumber
提供空字符串;在字段中输入“abc”会得到相同的结果。我无法找到一种方法来区分表单字段中是否存在非数字字符以及是否完全没有输入。