我们有一个输入type = "number"
,我们设置了onChange
方法。
输入的默认值为0.
然后我们以编程方式将值更改为10。
现在我们再次手动将值更改为0。
在手动更改时未调用onChange
方法。我认为这是因为当我们以编程方式将其值更改为10时,事件未被调用。因此,在某种程度上,控件认为该值仍为0。
仅当我手动将值设置为程序更改之前的值时才会发生这种情况。如果我使用任何其他值来进行手动更改,则会正确触发onChange
事件。
答案 0 :(得分:4)
以编程方式更改表单控件的值不会触发其更改处理程序,可能是因为在用户更改了值并且控件失去焦点后,change事件被指定为发生。程序化更改不遵循该顺序(以编程方式设置焦点和模糊以模仿用户操作没有帮助,尽管可以在元素上调度程序化更改事件。)
HTML5引入了一个新的input事件,只要输入收到用户输入,就会触发该事件:
<input id="i0" oninput="alert(this.value);" value="">
您可以使用它而不是onchange,但它会在每个按键上触发,也会在文本被粘贴或拖动到输入时触发。
但请注意,没有任何浏览器完全支持HTML5(因为它是一个移动目标,因此可能永远不会支持),因此如果输入事件不是,则需要提供功能测试和后备机制支撑。
答案 1 :(得分:0)
输入需要关注onchange以被触发。如果以编程方式设置输入值不会触发onchange事件,这实际上是一件好事。它会在输入和代码之间创建一个循环设置。