【问题标题】:Knockout JS Radio buttons selecting last button if all values are true如果所有值都为真,则淘汰 JS 单选按钮选择最后一个按钮
【发布时间】:2016-08-12 15:48:26
【问题描述】:

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

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 link rots 问题对未来的访问者的用处将大大降低。

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


【解决方案1】:

来自documentation

对于单选按钮,当且仅当参数值等于单选按钮节点的``value属性或checkedValue参数指定的值时,KO将设置要检查的元素p>

在您的情况下,您需要将checkedValue 设置为true,因此当您的Checked observable 包含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 属性中有实际的 boolean 值,并且您的服务器不会将它们作为字符串发送,例如"true",因为在这种情况下您还需要将checkedValue 指定为字符串:

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

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

【讨论】:

  • 问题是现在一切都是真的,所以当我从服务器获取数据说其中一个是真的时,不会检查任何值
  • 您是否删除了 name 属性?对我来说,所有真假都可以正常工作:jsfiddle.net/7w2uvjqz/1,如果它仍然不工作,你能更新这个小提琴吗?
  • 我没有删除名称属性,因为我需要他们作为一个组这就是为什么他们在我制作的 jsfiddle 中具有相同的名称
  • 好的,但是你应该确保你从服务器得到一个真正的布尔值,而不仅仅是字符串"true"。因为如果你有字符串,你需要有这样的东西:jsfiddle.net/hrhuym0u
  • 谢谢!设法让它工作得恰到好处!我像在你上一个 js fiddle 中一样设置它并且它有效!
猜你喜欢
  • 2022-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2014-02-26
  • 2013-12-03
  • 2017-09-02
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多