2012-06-18 15 views
2

我想創建一組使用淘汰賽的下拉菜單,允許用戶從列表中選擇最多3個值,例如顏色。列表開始爲: - 紅,橙,黃,綠,藍,靛,紫如何創建共享單個列表的鏈接下拉列表,並確保只能在一個下拉列表中選擇每個值?

DropDown 1 - Select any of the 7 
DropDown 2 - Select any of the 6 remaining 
Dropdown 3 - Select any of the 5 remaining 

如果用戶返回並改變下拉1到的東西,他們應該只有其他剩餘的顏色的選擇(和下降1)。如果他們然後改變它,我將能夠去下拉2或3,並將其改爲原來的值1.

我想我需要一個包含7個項目的初始數組,然後我需要一個每個下拉列表可觀察到。這3種可能性必須基於最初的數據,並且不包括其他三個下拉列表中的選定數據。我真的很掙扎着。我甚至無法接近實施它。

這甚至可能還是淘汰賽的適當使用,或者我應該只是看看JS有一個onchange

回答

2

這是絕對有可能在淘汰賽。可能有10種方法可以做到這一點。我想出了一個在這裏的方法:

http://jsfiddle.net/mbest/wfW97/

下面是引用的代碼:我用我的repeat綁定插件

<div data-bind="repeat: colors.length"> 
    <select data-bind="options: selfAndUnselectedColors($index), optionsCaption: 'select a color', value: selections[$index]"></select> 
</div>​ 

function ViewModel() { 
    var self = this; 
    self.colors = ['red','orange','yellow','green','blue','indigo','violet']; 
    self.selections = []; 
    ko.utils.arrayForEach(self.colors, function() { 
     self.selections.push(ko.observable()); 
    }); 
    self.selfAndUnselectedColors = function(index) { 
     var selfColor = self.selections[index](); 
     return ko.utils.arrayFilter(self.colors, function(color) { 
      return color === selfColor || !ko.utils.arrayFirst(self.selections, function(sel) { 
       return color === sel(); 
      }); 
     }); 
    } 
} 
ko.applyBindings(new ViewModel()); 

和HTML創建重複的選擇元素,但是如果你想要的話,你可以使用其他方法。

+0

太棒了。非常感謝你對此的幫助,以及Knockout的傑出工作!我只想要3,所以只是改變了重複。其餘的是完美的。這對於很多應用程序非常有用。擁有Knockout食譜網站並將所有這些隨機的東西收集在一起會很棒。有這麼多真正有用的東西可以做。 – GraemeMiller

+0

我將其更改爲使用選擇列表的索引。我想知道你是否知道如何爲每個下拉菜單設置初始值? http://jsfiddle.net/GraemeMiller/BTHHS/1/ – GraemeMiller

相關問題