我想創建一組複選框與一個按鈕,用於取消選中時使用淘汰賽的所有複選框。我已經看到這個功能與複選框選擇/取消選擇所有其他複選框,但我希望這個按鈕是一個單選按鈕,所以它不能被取消選中,但我希望它自動取消選中任何複選框時勾選。取消選中與單選按鈕使用淘汰賽的複選框
我下面的代碼的問題是,在寫函數之前調用read函數,所以當我單擊單選按鈕時,它會讀取一個複選框,然後清除複選框。所以我需要選兩次才能更新它。
我的代碼如下:
JS:
function AppViewModel() {
var self = this;
self.fruits = ko.observableArray([
{name : 'Apple', selected : ko.observable(false)},
{name : 'Banana', selected : ko.observable(false)},
{name : 'Coconut', selected : ko.observable(false)}
]);
self.fruitGroup = ko.computed({
read : function() {
var someSelected = false;
var fruitsArray = self.fruits();
fruitsArray.forEach(function(fruit){
if (fruit.selected()) {
someSelected = true;
}
});
return !someSelected;
},
write : function(newState) {
var fruitsArray = self.fruits();
fruitsArray.forEach(function (fruit){
fruit.selected(false);
});
return true;
}
});
}
ko.applyBindings(new AppViewModel());
HTML:
<input type="radio" data-bind="checked: fruitGroup"/>
<label>None</label>
<hr/>
<div data-bind="foreach: fruits">
<div>
<input type="checkbox" data-bind="checked: selected, attr: {id: name}"/>
<label data-bind="text: name, attr: {for: name}">Fruit</label>
</div>
</div>
http://jsfiddle.net/dp3jngmu/1/
這種行爲可能有一個單選按鈕,嚴重支持這樣做「取消選中」...如果將'type'屬性更改爲'checkbox',它應該可以工作。 – user3297291
是的,它可以使用複選框而不是單選按鈕,但我不希望用戶能夠在被選中時取消選擇這個選項,這就是爲什麼我更喜歡單選按鈕 – user2424495