0

我有一个组合框,我验证了选择的更改应在满足条件时恢复。

我已经检测到了这种情况,但是当我更改组合框的值和显示值时,与组合框关联的 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

4

2 回答 2

3

只设置,不显示值

myComboBox.set("value", value, false);

那么只有watch回调被触发,而不是dojo/onor onChange

检查此 jsFiddle 以查看差异:http: //jsfiddle.net/phusick/d7ymY/

注意:如果您需要trim() 显示值,请考虑自定义setterdojo/aspect::before.

于 2012-09-05T17:39:17.240 回答
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

于 2012-09-05T14:47:21.140 回答