【问题标题】:jQuery val refuses to return non numeric input from a number field (Under Chrome)jQuery val 拒绝从数字字段返回非数字输入(在 Chrome 下)
【发布时间】:2023-03-03 11:04:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 在 Firefox 中工作,必须是特定于 Chrome 的,我猜 Safari 也是因为它呈现相同的“数字”属性。
  • 多么烦人 - 是的,刚刚尝试过 IE10,它运行良好!
  • 这不是 jQuery 问题 - 元素本身正在为非数字输入返回一个空字符串。
  • IE10 和 FF20 尚不支持 input type=number,因此它们回退到 input type=text。 Opera 支持它并显示一个空值。
  • @apsillers 实际上,规范说 type="number" 应该返回一个浮点数(数字输入或其他)

标签: jquery google-chrome


【解决方案1】:

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

例如:

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

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

});

【讨论】:

  • 实际上暂时放弃了数字类型,因为 firefox 有问题失去对输入框的关注。
  • 使用此解决方案,用户无法在数字开头连续键入,因为它会不断将插入符号移动到末尾。
【解决方案2】:

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

有关更多背景信息,请参阅this older question

【讨论】:

  • 这有一个不幸的缺点,A)用于轻松输入小整数的向上和向下箭头消失了,B)在移动显示器(平板电脑,智能手机)上,键盘不会自动显示数字,而是完整的 abc 键盘而是。
  • “怪癖”是规范:w3.org/TR/html5/forms.html#number-state-(type=number):“如果元素的值不是有效的浮点数,则将其设置为空字符串”。如果您得到一个空字符串并且想要无效值:暂时将输入类型更改为“文本”,再次检索该值,将其转换回 type="number"
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多