【问题标题】:Detecting and clearing a form field in Chrome在 Chrome 中检测和清除表单域
【发布时间】:2023-04-05 08:08:01
【问题描述】:

前几天我在构建表单时遇到了一个问题。 输入框有一个类型“数字”。 在 Chrome 中,输入字段显示向上/向下箭头。单击向上或向下按钮时,我无法检测到更改,因此我使用 CSS 删除了按钮。这很简单,但并没有解决我所有的问题。

我在现场进行了一些验证(使用 keyup)。如果我在该字段中输入一个数字,它可以正常工作,但如果我在该字段中输入一个字母,我就无法检测到它。

在 FF 和 IE 中使用 .val() 可以很好地获取字段的值(数字或字母),但在 Chrome 中却没有那么多。 如果字段中有字母,我也找不到清除字段的方法。使用 .val('') 只需将光标向左移动。

正如我所说,这个问题是特定于使用 Chrome 的。对于所有其他浏览器,我的代码都可以正常工作。

关于可用于解决此问题的代码的任何建议?

【问题讨论】:

  • 欢迎来到 StackOverflow!如果您发布遇到问题的代码,我们可以提供更多帮助。

标签: javascript jquery google-chrome


【解决方案1】:

问题都围绕着“数字”类型的输入。

HTML5 草案定义:

值清理算法如下:如果元素的值不是有效的浮点数,则将其设置为空字符串。

http://www.w3.org/TR/html5/forms.html#number-state

尝试执行 .val() 来检索其中包含非数字的 type=number 输入只会返回空字符串。看起来 Chrome 的实现是在实际检索任何值之前将字段的值设置为空字符串。

至于使用 .val('') 重置字段并且无法识别 keyup,此代码似乎可以工作 http://jsfiddle.net/hVVSA/2/

JS

var $input = $('input').keyup(function(){
  console.log("here");
});

$('#clearfield').click(function(){
  console.log('val was '+$input.val());
  $input.val('');
});

HTML

<input type="number" />

<button id="clearfield">clear</button>

【讨论】:

  • 感谢您的快速回复。以您描述的方式清除该字段似乎确实有效。如果它不是一个数字,就没有办法获得价值吗?如果不能做到这一点,就很难进行验证。
  • 在您的验证中,您不能只检查它是否为空字符串,如果是,您可以假设 A)它是一个非数字或 B)他们从未在其中输入任何内容?无论哪种情况,您都应该能够采取适当的措施。否则,您总是可以只使用普通输入字段并使用isNaN()/^\d+$/.test(input) 进行验证以确保它是一个数字。
  • 是的,我已经考虑过这样做。我的代码中一定有一些奇怪的东西 $('#id').val('');没有清理场地。使用您提供的代码 sn-p 确实如此,这对我来说有点混乱。需要更多的 D&C,我认为...
  • 好的...这是我发现的。使用按钮清除字段可以正常工作,但如果您尝试使用 $('#id').val(''); 清除字段在 keyup 函数中它没有。知道如何解决这个问题吗???
  • 老实说,我不确定为什么会这样。
猜你喜欢
  • 2015-05-26
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多