您不能将对象用作ID。屏幕背后发生的是,当您更改dijit/form/Select
的值时,它将首先通过使用dijit/form/Select::compare()
函数验证旧值是否与新值不同。这个功能实现为:
compare: function(/*anything*/ val1, /*anything*/ val2){
if(typeof val1 == "number" && typeof val2 == "number"){
return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2;
}else if(val1 > val2){
return 1;
}else if(val1 < val2){
return -1;
}else{
return 0;
}
}
这意味着,为了有所不同,您的ID必须是比以前的ID较小或较大。
但是,当你比较的对象,这是不行的,例如:
var a = { id: 1 };
var b = { id: 2 };
a < b; // Returns false
b < a; // Returns false
所以,即使属性是不同的,比较始终返回false,那么这两个对象都被视为“平等” ,这意味着onChange
事件未被触发。
为了解决这个问题,你必须改变compare()
功能的实现,例如:
var selectServerAddServices = new Select({
name : "selectServer_forAddService",
style : {
width : '180px'
},
compare: function(val1, val2) {
return (val1.id1 - val2.id1) + (val1.id2 - val2.id2);
},
onChange: function() {
alert("test");
}
});
现在将同时检查你的ID属性,这应使onChange
触发器在每个案件。我也更新了JSFiddle:http://jsfiddle.net/gxy2G/3/
如果您使用'selectServerAddServices.on(“change”,cunction(){})''它是同样的事情吗? – dgiugg
是其同样,无论是方式的dosent工作 – user3808286
看起来你做错了什么,则:http://jsfiddle.net/gxy2G/ – g00glen00b