【问题标题】:IE11 and input type="number"IE11 并输入 type="number"
【发布时间】:2017-11-22 08:37:58
【问题描述】:

我有一个输入 type="number" 的表单,这在 IE11 中给我带来了问题:一些值被接受,而另一些则不被接受,显然是随机的。

代码如下:

<input type="number" style="text-align:right" min="1.00" placeholder="1,00" name="value-name" id="value" step="0.01" title="title" required/>

出于某种原因,IE11 接受 9.2、9.4、9.5、9.6、9.7、9.9,但拒绝 9.3 和 9.8。这只是一个例子,它发生在所有数字上,我不明白它背后的原因。此外,一些数字在几分钟前被接受了,但现在不再是了。

除此之外,之前的所有值都应该无效,因为我在欧洲,, 是小数部分的分隔符,而不是 .。相反,当我使用 , 时,IE 不会将其转换为 .,并且当通过 POST 传递给 PHP 时,PHP 的 is_numeric() 返回 false!

我怎样才能完成所有这些工作?谢谢

【问题讨论】:

  • 作为一种解决方法,您可以在服务器端用点替换逗号return preg_replace("/[^0-9\\.]/", null, str_replace(",", ".", $string));
  • 另外,我认为你应该看看这篇关于 SO - stackoverflow.com/questions/15303940/… 的帖子
  • 我已经在服务器端添加了解决方法,并且阅读了您链接的帖子,我决定通过将formnovalidate 添加到我的表单并用 Javascript 编写一个函数来实施检查。我还决定将点作为十进制分隔符,因为我在网页中显示的值也使用点。但是现在我有另一个问题,因为如果我以“6.5”的形式编写,然后我在 Javascript document.getElementById("value").value 中执行,Firefox 返回一个空字符串,因为如果我用逗号作为十进制写它,它只会返回数字分隔符。
  • 好的,通过在表单中​​添加属性lang="en" 似乎解决了最后一个问题

标签: php html forms internet-explorer


【解决方案1】:

我通过接受 ., 作为小数分隔符来解决此问题。

我在表单输入中添加了formnovalidate lang="en"属性,并通过Javascript执行了表单验证,代码如下:

function validateForm(minValue) {
var number = document.getElementById("value").value.replace(",",".");
if(number != "") {
    var isNaNres = isNaN(parseFloat(number));
    var isFiniteRes = isFinite(number);
    if (!isNaNres && isFiniteRes && number >= minValue && number.match("^[0-9]+(\.[0-9]{1,2})?$"))
        return true;

}
alert("<Error message>");
return false;
}

需要正则表达式匹配以保证数字最多有 2 位小数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2016-07-02
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多