7

刚刚在 jQuery 中偶然发现了一些奇怪的东西,同时编写了一些验证代码——我有一个 html5“数字”字段;

<input type="number" class="required numeric" />

然后,我的脚本将查看页面上的每个字段,检查类并根据需要进行验证。我奇怪地注意到,如果我在我的一个数字字段中输入“X”,我会收到“请在此字段中输入一个值”错误,而不是“这应该是一个数字”错误。经过一番摸索和大量调试后,我敲了一个 jsFiddle 来演示我的理论-如果您在数字字段中输入一个字符,然后尝试从 jquery 执行 .val() 它将不会返回任何内容-好像字段为空(我在 Chrome 中遇到了这个——不确定它是否在所有浏览器中都这样工作);

http://jsfiddle.net/shawson/SE46L/3/

这是小提琴 - 输入一些数字,然后输入几个字母来看看疯狂。任何人都知道这是否是设计使然,如果是这样......为什么?

4

2 回答 2

9

这不是 jQuery 问题。如果您使用本机 element.value(例如使用 getElementByID('something').value),您将获得相同的结果。Chrome 处理输入 type=number 的方式很奇怪,您可以选择使用 type=text 和 pattern 属性来解决它。

有关更多背景信息,请参阅这个较早的问题

于 2013-05-07T14:01:09.297 回答
1

在 Chrome 中遇到了同样的问题,当它们不是数字时,不会在 type=number 上给出值。我所做的工作是简单地将值设置为自身的值。这样一来,它就不会让您输入非数值。这是一个黑客,但它的工作原理。

例如:

$('body').find('input[type="number"]').each(function(k,v) {

    $(this).on('keyup blur', function() {
        $(this).val($(this).val());
    });

});
于 2014-05-02T00:39:34.307 回答