我有一个组合框,我已经确认选择的更改应该在满足条件时恢复。
我已经检测到了这个条件但是当我更改了组合框的值和显示值时,与组合框关联的onChange被触发了。以下是我用来更改选择的代码:
dijit.byId('scheduleName').set('value',val,false);
dijit.byId('scheduleName').set('displayedValue',displayVal,false);
我还尝试在触发上面的代码之前将onChange设置为空白,然后重新附加onChange代码,如下所示:
dojo.connect(dijit.byId('scheduleName'),'onChange','');
dijit.byId('scheduleName').set('value',scheduleNameVal,false);
dijit.byId('scheduleName').set('displayedValue',trim(String(scheduleNameName)),false);
dojo.connect(dijit.byId('scheduleName'),'onChange', "hideGrid");
hideGrid是一个javascript函数。我正在使用Dojo 1.8
答案 0 :(得分:3)
仅设置值,而不是 displayedValue
myComboBox.set("value", value, false);
然后才会触发watch
回调,而不是dojo/on
或onChange
。
检查此jsFiddle以查看差异:http://jsfiddle.net/phusick/d7ymY/
注意:如果您需要trim()
displayedValue ,请考虑自定义setter
或dojo/aspect::before
。
答案 1 :(得分:1)
您应该使用dojo.disconnect
代替
dojo.connect(dijit.byId('scheduleName'),'onChange','');
示例:
var hndl, sched = dijit.byId('scheduleName');
var fnWireOnChange = function(){
hndl = dojo.connect(sched,'onChange', 'hideGrid');
};
dojo.disconnect(hndl);
sched.set('value',scheduleNameVal,false);
sched.set('displayedValue',trim(String(scheduleNameName)),false);
fnWireOnChange();
作为旁注,我们已弃用connect/disconnect
以支持dojo/on
https://dojotoolkit.org/reference-guide/1.8/dojo/on.html#dojo-on