2

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

但是...在同一页面中,某些有线情况下我必须手动设置值..所以我必须使用一些 javascript 来设置选择组合框的值,但在这种情况下,我不想要那个 onChange 事件被开除...

我怎么能绕着它走???

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

4

5 回答 5

9

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

例如:

dijit.byId(myComboBox).set("value","Choose an option...",false);
于 2011-06-17T20:52:57.213 回答
4

在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);
于 2012-12-06T15:06:48.153 回答
1

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

于 2009-07-08T03:31:48.833 回答
1

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

于 2009-07-08T03:34:46.677 回答
0

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

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

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

于 2010-03-11T19:52:05.237 回答