任何人都可以帮助我激活第一个单选按钮作为标准
这是我的代码
<div>Wiederholung</div>
<div data-bind="foreach:answers">
<label>
<input type="radio" name="wiederholung" data-bind="click: $root.setChosenAnswer" />
<span data-bind="text: name"></span>
</label>
<br />
</div>
<pre data-bind="text: JSON.stringify(ko.toJS($root), null, 2)"></pre>
JS:
function Question() {
var self = this;
this.answers = ko.observableArray([
new Answer("Nie", true),
new Answer("Täglich", false),
new Answer("Wöchentlich", false)]);
this.setChosenAnswer = function(wahl) {
if (wahl !== self.userAnswer()) {
ko.utils.arrayForEach(self.answers(), function(answer) {
answer.isChosen(wahl === answer);
});
self.userAnswer(wahl);
}
return true;
};
this.userAnswer = ko.observable();
this.userAnswer.subscribe(function(newValue) {
alert("Ich moechte mein Termin " + this.userAnswer().name() + " Wiederholen");
}, this);
}
function Answer(name, isChosen) {
this.name = ko.observable(name);
this.isChosen = ko.observable(isChosen);
}
ko.applyBindings(new Question());
答案 0 :(得分:1)
您可以使用$ index()函数来确定数组中项目的索引,如下所示:
<input type="radio" name="wiederholung" data-bind="click: $root.setChosenAnswer, attr: {checked: $index()==0 }" />
但它适用于淘汰2.1及以上,而在你的演示中你使用的是2.0。
答案 1 :(得分:1)
在html中试试这个
<input type="radio" name="wiederholung" data-bind="value: $data.name, checked: $root.defaultChecked, click: $root.setChosenAnswer" />
在js
this.defaultChecked = "Nie";
答案 2 :(得分:0)
来自"checked" binding documentation:
对于单选按钮,KO将仅当前设置要检查的元素 如果参数值等于单选按钮节点的value属性 或者由checkedValue参数指定的值。
所以你需要:
radio
元素标记更改为包含value="true"
,因为如果您true
,则希望选择它。setChosenAnswer
函数更改为返回字符串值"true"
或"false"
。您也可以在KnockoutJS中查看此SO question的无线电绑定