Javascript dojo Select onChange只运行一次
我的Dojo小部件Select仅通过第一次更改触发。所有其他更改事件都不起任何作用Javascript dojo Select onChange只运行一次,javascript,select,dojo,onchange,Javascript,Select,Dojo,Onchange,我的Dojo小部件Select仅通过第一次更改触发。所有其他更改事件都不起任何作用 var selectServerAddServices = new Select({ name : "selectServer_forAddService", style : { width : '180px' }, onChange: function() {
var selectServerAddServices = new Select({
name : "selectServer_forAddService",
style : {
width : '180px'
},
onChange: function() {
alert("test ");
}
});
有什么问题吗?
选择的选项由存储设置。不能将对象用作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属性,这将在每种情况下触发onChange。我还更新了JSFIDLE:如果您使用selectServerAddServices.onchange,cUnit{},这是同一件事吗?是的,这是一样的,双向的dosent Workook就像您做错了什么:哦,问题是存储中的id,我在id中添加了一个对象,因为我有更多的值。像这样:…id:{value1:x,value2:y}这里有一个例子,但是我如何在商店中正确地执行它呢?
var a = { id: 1 };
var b = { id: 2 };
a < b; // Returns false
b < a; // Returns false
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");
}
});