knockout.js 如果所有值都为真,则选择最后一个按钮的挖空JS单选按钮

bxgwgixi  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(150)

我尝试做的是显示一些单选按钮和服务器上的数据。问题是单选按钮的选中值可能都是false,然后KO自动选择最后一个单选按钮,就像我在下面创建的JS小提琴一样。如果其中一个值是true,这将完全按照预期工作,但在我的情况下,这些值很有可能都是false。
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/我的问题是修复后,以下这个jsfiddle通过设置checkedValue: 'true'和设置this.Checked = ko.observable("false")

67up9zun

67up9zun1#

documentation
对于单选按钮,当且仅当参数值等于单选按钮节点的′ ′ value属性或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:您应该确保在Checked属性中有实际的boolea n值,并且您的服务器不会将它们作为字符串发送,例如"true",因为在这种情况下,您还需要将checkedValue指定为字符串:

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

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

相关问题