2015-05-27 33 views
1

我想将多选下拉列表中的选定项目移动到另一个多选下拉列表中。 在我的情况下,即使数据是可观察数组,也不刷新选择列表。敲除多选择选项不起作用

我的代码是在jsfiddle中。谢谢。

self.Move = function(){ 
    if (self.availableMAS.length > 0 && $('#selectedAttributes1 :selected').length > 0) 
    { 
     //self.selectedMAS = []; 
     $('#selectedAttributes1 :selected').each(function(i, selected){ 
      self.selectedMAS.push(new MAs($(selected).val(), $(selected).text())); 
      self.availableMAS.push(new MAs($(selected).val(), $(selected).text())); 
      //alert($(selected).text() + $(selected).val()); 
      alert(self.selectedMAS.length);     
     }); 
    } 

http://jsfiddle.net/balain/enjjx3q3/

+1

如果您打算使用淘汰赛,请使用淘汰赛。 JQuery有它的位置,但不是你想要使用它的方式。 –

回答

0

看起来你有一些事情正在进行。您将selectedMAS创建为可观察数组,然后将其分配给一个对象。此外,您没有利用按钮和选择控件的数据绑定功能。

看到这个更新: http://jsfiddle.net/enjjx3q3/9/

更新的移动功能:

self.Move = function(){ 
    for(var i = 0, len = self.selectedItms().length; i < len; i++) { 
     self.selectedMAS.push(self.selectedItms()[i]); 
    } 
}; 

更新HTML:

<select id="selectedAttributes1" 
     data-bind="options: availableMAS, 
        selectedOptions: selectedItms,      
        optionsText: 'Name'" 
      multiple size="6"> 
</select> 
<input id="btnMove" type=button value="Move" data-bind="click: Move" ></input> 
<select id="selectedAttributes2" 
     data-bind="options: selectedMAS,       
        optionsText: 'Name', 
        selectedOptions: selectedMAS" 
     multiple size="6"> 
</select> 
+0

谢谢,它的工作像魅力:) – balaG

0

首先,在下面一行:

vm.selectedMAS = [new MAs(1, 'Name1')]; 

你用裸(观察)阵列代替selectedMAS而不是调用它的push方法:

vm.selectedMAS.push(new MAs(1, 'Name1')); 

而且,主要的一点是,你需要使用selectedOptions结合处理程序来实现多个选项检查:

<select multiple size="6" data-bind="options: availableMAS, 
            selectedOptions: selectedMAS, 
            optionsText: 'Name'"> 
</select> 

,在读取时:

<select multiple size="6" data-bind="options: selectedMAS,       
            optionsText: 'Name'"> 
</select> 

Fiddle

+0

谢谢你,它的工作 – balaG