【问题标题】:input type="number" and IE10+输入 type="number" 和 IE10+
【发布时间】:2013-11-08 12:19:08
【问题描述】:

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

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

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

我知道新的 .valueAsNumber 属性的存在,但这并不能完全帮助我,因为我无法区分其他浏览器上的空和 IE10/11 上的非数字(.value 为空,@ 987654328@ 是NaN)。

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

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

【问题讨论】:

  • 为什么不考虑从允许 blank 更改为使用超出您范围的某些 default,例如0,您可以检测到它并使其行为不同,那么这可以始终将所有内容转换为 Number 以便您始终只能使用 Numbers? (显然,您仍然应该进行服务器端验证)

标签: javascript html internet-explorer validation input


【解决方案1】:

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

在我的书中,实用主义总是胜过独创性;)

【讨论】:

    【解决方案2】:

    继续在支持它的浏览器中使用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
    }
    

    支持valueAsNumber的浏览器也支持input[type=number],这样就可以解决你的问题了。

    【讨论】:

    • 谢谢,但这不是我的问题。即使使用.value.valueAsNumber,我也找不到区分IE11 上的空白和非数字输入的方法,因为.value 在这两种情况下都是空白的。
    • 如果输入的值是一个空字符串,那么我的测试表明 IE11 为.valueAsNumber 返回NaN,而不是空白,不管是空白。
    • 是的,这就是问题所在。一个空的输入字段给我一个空字符串.valueNaN.valueAsNumber;将“abc”放在字段中会产生相同的结果。我找不到一种方法来区分表单字段中存在非数字字符和根本没有输入。
    猜你喜欢
    • 1970-01-01
    • 2017-11-22
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多