首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入type="number“和IE10+

输入type="number“和IE10+
EN

Stack Overflow用户
提问于 2013-11-08 20:19:09
回答 2查看 1.7K关注 0票数 2

我正在尝试使用HTML5 <input type="number">元素对数字字段进行Javascript客户端验证。还有服务器端验证,所以让我们不要对此大惊小怪……;)

我希望提供三种状态级别的验证:绿色表示定义范围内的有效数字,黄色表示超出范围的数字或空字段,红色表示非数字输入。

我的问题是,对于非数值型输入,IE11 (我相信是IE10)似乎会返回一个空白的.value属性。也就是说,如果我在框中键入abc.value就是""。这使我无法区分黄色(空白)和红色(垃圾)。

我知道新的.valueAsNumber属性的存在,但这对我没有完全的帮助,因为我不能区分其他浏览器上的空和IE10/11上的非数字(.value为空,.valueAsNumberNaN)。

有没有人解决了这个问题?我不想求助于跟踪按键,我想支持恢复到type="text"并且没有.valueAsNumber的旧浏览器(回到IE8)。先谢谢你...

编辑:为了澄清(希望如此),我的问题是IE10/11中的.value.valueAsNumber的输出不允许我区分无输入和非数值型输入。我希望能够区分这两种情况,而不需要浏览器嗅探和退回到type="text"

EN

回答 2

Stack Overflow用户

发布于 2013-11-08 20:25:47

您能不能只分配一个合理的默认值(零)?添加到您的输入类?那么你就不需要在你的代码中进行区分了?

在我的书中,实用主义总是胜过巧妙;)

票数 2
EN

Stack Overflow用户

发布于 2013-11-08 20:46:28

继续在支持valueAsNumber的浏览器中使用它。

代码语言:javascript
复制
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
}

支持valueAsNumber的浏览器,它们也支持input[type=number],所以这将解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19858974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档