2015-05-27 36 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