如果所有值都为真,则敲除JS单选按钮选择最后一个按钮

时间:2016-04-20 06:43:00

标签: javascript knockout.js data-binding radio-button radio

我要做的是显示一些带有服务器数据的单选按钮。问题是单选按钮的选中值可能都是假的,然后KO自动选择最后一个单选按钮,就像我在下面创建的JS小提琴一样。如果其中一个值为true,则可以完美地按预期工作,但在我的情况下,这些值很可能都是假的。

https://jsfiddle.net/9mtzbmng/1/

 self.addItems = function (items) {
            for (var x in items)
            {
                self.Items.push(new Item(items[x]));
            }
        }
    function Item(items) {
     this.ID = items.ID;
     this.Checked = ko.observable(false);
    }

 <input type="radio" data-bind="value: $data.ID,checked: Checked, checkedValue: Checked" name="items">

编辑: https://jsfiddle.net/hrhuym0u/ 通过设置checkedValue: 'true'并设置this.Checked = ko.observable("false")来跟踪此jsfiddle后我的问题已修复!

1 个答案:

答案 0 :(得分:2)

来自documentation

  

对于单选按钮,当且仅当参数值等于单选按钮节点的“值属性”或 checkedValue参数指定的值时,KO才会设置要检查的元素

在您的情况下,您需要将checkedValue设置为true,这样当您的Checked观察点包含true时,它才会检查您的单选按钮:

<input type="radio" name="radioB" data-bind="value: $data.ID, 
                                             checked: Checked, 
                                             checkedValue: true">

演示https://jsfiddle.net/r6njzje3/

注意:如果您的单选按钮具有相同的name,那么它们正在形成一个组,因此只能检查其中一个,即原始样本中的方式始终检查最后一个。因为checked始终等于checkedValue的值。因此,如果要删除名称name="radioB",则会检查所有无线电。

注意2:您应确保boolea属性中包含实际Checked n个值,并且您的服务器不会将其作为字符串发送,例如"true",因为在这种情况下,您还需要将checkedValue指定为字符串:

<input type="radio" name="radioB" data-bind="value: $data.ID, 
                                             checked: Checked, 
                                             checkedValue: 'true'">

演示:https://jsfiddle.net/hrhuym0u/