您不能將對象用作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