刷新dijit.form.Select

时间:2012-06-08 08:24:56

标签: dojo

首先,您必须知道我正在使用Struts(J2EE开发项目) 这是我的问题:

我的页面中有2个dijit.form.Select小部件,而这些小部件填充了相同的列表(由Java类返回)。

当我在第一个“选择小部件”中选择一个选项时,我想更新我的第二个选择小部件,并从我的第一个小部件中禁用所选选项(以防止用户选择相同的项目两次)。

我成功了(我稍后会告诉你我的代码),但我的问题是,当我打开第二个列表时,即使只有一次,它也永远不会再次刷新。所以我可以用我的第一选择玩很长时间,并选择许多其他选项,在我的第二个列表中禁用的唯一选项是我选择的第一个。

这是我的JS代码:

function removeSelectedOption(){
       var list1 = dijit.byId("codeModif1");
       var list2 = dijit.byId("codeModif2");
       var list1SelectedOptionValue = list1.get("value");

       if(list1SelectedOptionValue!= null){
           list2.reset();
           for(var i = 0; i < myListSize; i++){
               // If the value of the current option = my selected option from list1
               if(liste2.getOptions(i).value == list1SelectedOptionValue){
                   list2.getOptions(i).disabled = true;
               } else {
                   list2.getOptions(i).disabled = false;
           }
       }
   }

感谢您的帮助

此致

1 个答案:

答案 0 :(得分:2)

我认为你必须在更新其选项的属性后重置()选择。类似的东西:

function removeSelectedOption(value)
{
    var list2 = dijit.byId("codeModif2"),
        prev  = list2.get('value');

    for(var i = 0; i < myListSize; i++)
    {
        var opt = myList[i];
        opt.disabled = opt.value === value;
        list2.updateOption(opt);
    }
    list2.reset();
    // Set selection again, unless it was the newly disabled one.
    if(prev !== value)  list2.set('value', prev);
};

(我假设你有一个包含可能选项的myList,以及随附的myListSize。)