Javascript dojo Select onChange只运行一次

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() {

我的Dojo小部件Select仅通过第一次更改触发。所有其他更改事件都不起任何作用

        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");   
    }
});