【问题标题】:Why this function for input with number only doesnt work actually with input type:number?为什么这个仅用于数字输入的功能实际上不适用于输入类型:数字?
【发布时间】:2014-07-04 07:36:20
【问题描述】:
$('input').on('keyup',function(){
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

发件人:https://stackoverflow.com/a/891816/622813

在我用<input type="number">测试之后

当我输入1234a 之类的内容时,值为空白

但不是<input type="text">,当我输入1234a时,值仍然是1234

只是想知道为什么?

演示: http://jsfiddle.net/PV2fQ/


更新:

<input type="tel"> 这个工作不错...http://jsfiddle.net/PV2fQ/10/ 为什么?

【问题讨论】:

  • 出于好奇,我在所有浏览器上都尝试了上述代码,该代码在 Mozilla Firefox、Internet Explorer 11 和 Apple safari 上运行良好(即它只是删除了非数字字符)但在 Google chrome &歌剧。

标签: javascript jquery validation input numbers


【解决方案1】:

如果您在替换语句之前执行console.log(this.value);,您将看到对于非数字输入,<input type="number"> 本身会获得一个空白值,即this.value = ''

这似乎是这个输入类型的内部实现。

另一种选择:http://jsfiddle.net/PV2fQ/12/

$('input').keypress(function (e) {
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
        return false;
    }
});

【讨论】:

  • 您究竟希望发生什么以及您想使用什么类型的输入?
  • 只想使用type:number,因为手机键盘只会显示数字...类似的东西
  • 我相信如果 type=number,用户将只看到手机上的数字键盘,因此您不必担心他们在字段中输入非数字。检查here
  • 是的,但是桌面浏览器呢:P
  • @l2aelba:它确实适用于数字类型的输入。甚至在 Firefox 30 中也太好了:输入一个数字加一个字母,整个输入将被删除。有关带有数字类型输入的一些新浏览器的行为的更多信息,尽管从明显不同的角度来看,请参阅stackoverflow.com/questions/24407109/…。只是为了表明浏览器世界在这方面发生了一些事情,W3 标准没有很好地定义。所以,如果这对你有用,我会选择 Nikhil 的解决方案。
猜你喜欢
  • 2016-08-16
  • 2015-12-02
  • 2013-10-04
  • 2023-03-30
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多