【问题标题】:how to stop onChange in javascript如何在javascript中停止onChange
【发布时间】:2009-07-08 03:11:31
【问题描述】:

在我的一个选择框中,我指定了 onChange="..." ... 因为我想在任何选择更改后更改其他表单值。

但是...在同一页面中,某些有线情况下我必须手动设置值.. 所以我必须使用一些 javascript 来设置选择组合框的值,但在这种情况下,我不希望触发 onChange 事件......

我怎么能绕着它走???

忘了提到我实际上正在使用 dijit.form.comboBox。 对于普通的 HTML 表单组合框,它不会引起任何问题。 只有我使用 dijit 组合框,并且我尝试将值设置为其他值,dojo 将触发 onChange。

【问题讨论】:

    标签: javascript-events


    【解决方案1】:

    如果您使用的是 Dijit,那么您可以在 set() 方法的末尾传递一个额外的 false 标志,以防止小部件触发 onChange 事件。

    例如:

    dijit.byId(myComboBox).set("value","Choose an option...",false);
    

    【讨论】:

      【解决方案2】:

      http://dojo-toolkit.33424.n3.nabble.com/onchange-event-firing-when-setting-value-of-a-Select-programmatically-td3985692.html 处从 Paul Christopher 那里找到这个答案。效果很好!

      myDigit._lastValueReported = myValue;
      myDigit.set('value', myValue);
      

      【讨论】:

        【解决方案3】:

        你不需要做任何事情。使用 Javascript 设置值不会触发您的 onchange 事件处理程序。

        【讨论】:

        • 是的..你是对的。只是我忘了提到我实际上正在使用 dijit.form.comboBox。对于普通的 HTML 表单组合框,它不会引起任何问题。只有我使用 dijit 组合框,并且我尝试将值设置为其他值,dojo 将触发 onChange。
        【解决方案4】:

        一般来说,使用 JavaScript 设置值不会触发 onchange。如果您正在处理一个会触发它的奇怪浏览器,您可以删除 onChange (element.onchange = null),更改值,然后再将其添加回来 (element.onchange = functionname)。

        【讨论】:

        • 忘了提到我实际上正在使用 dijit.form.comboBox。对于普通的 HTML 表单组合框,它不会引起任何问题。只有我使用 dijit 组合框,并且我尝试将值设置为其他值,dojo 将触发 onChange。感谢您的快速回答
        • 如果事件是通过 attachHandler/addEventListener 添加的,这将不起作用
        【解决方案5】:

        仅供参考,这个答案并不完全正确。确实,简单地设置值不会触发 onChange 事件,但是一旦控件失去焦点,就会检测到更改并触发 onChange。

        所以延迟 onChange 与阻止 onChange 并不完全一样——这是我需要做的!

        我可以暂时删除该事件,模糊并重新聚焦该字段,然后恢复该事件,但这是一个丑陋的 hack。动态添加的事件(如 jQuery)使情况变得复杂。所以我真正想要的是将“焦点值”设置为“新值”,但一直找不到。我可以尝试设置 defaultValue,但这会阻止正确的 form.reset()。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-02
          • 2021-01-28
          • 1970-01-01
          • 1970-01-01
          • 2021-06-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多