如何激活单选按钮

时间:2013-12-19 07:02:08

标签: knockout.js radio-button

任何人都可以帮助我激活第一个单选按钮作为标准

这是我的代码

<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());

demo

3 个答案:

答案 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参数指定的值。

所以你需要:

  1. radio元素标记更改为包含value="true",因为如果您true,则希望选择它。
  2. setChosenAnswer函数更改为返回字符串值"true""false"
  3. 您也可以在KnockoutJS中查看此SO question的无线电绑定