我的Dojo小部件选择仅在第一次更改时触发。所有其他更改事件都不起作用。
var selectServerAddServices = new Select({
name : "selectServer_forAddService",
style : {
width : '180px'
},
onChange: function() {
alert("test ");
}
});
可能是什么问题? 选择的选项由商店设置。
答案 0 :(得分:0)
您不能将对象用作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/