如果在编程之前更改了值,则手动更改值不会触发onChange事件

时间:2012-06-12 23:34:19

标签: javascript event-handling mobile-safari

我们有一个输入type = "number",我们设置了onChange方法。

输入的默认值为0.

然后我们以编程方式将值更改为10。

现在我们再次手动将值更改为0。

在手动更改时未调用onChange方法。我认为这是因为当我们以编程方式将其值更改为10时,事件未被调用。因此,在某种程度上,控件认为该值仍为0。

仅当我手动将值设置为程序更改之前的值时才会发生这种情况。如果我使用任何其他值来进行手动更改,则会正确触发onChange事件。

2 个答案:

答案 0 :(得分:4)

以编程方式更改表单控件的值不会触发其更改处理程序,可能是因为在用户更改了值并且控件失去焦点后,change事件被指定为发生。程序化更改不遵循该顺序(以编程方式设置焦点和模糊以模仿用户操作没有帮助,尽管可以在元素上调度程序化更改事件。)

HTML5引入了一个新的input事件,只要输入收到用户输入,就会触发该事件:

<input id="i0" oninput="alert(this.value);" value="">

您可以使用它而不是onchange,但它会在每个按键上触发,也会在文本被粘贴或拖动到输入时触发。

但请注意,没有任何浏览器完全支持HTML5(因为它是一个移动目标,因此可能永远不会支持),因此如果输入事件不是,则需要提供功能测试和后备机制支撑。

答案 1 :(得分:0)

输入需要关注onchange以被触发。如果以编程方式设置输入值不会触发onchange事件,这实际上是一件好事。它会在输入和代码之间创建一个循环设置。