【问题标题】:Set radio button true load time using knockout js使用淘汰赛js设置单选按钮真实加载时间
【发布时间】:2014-01-07 19:56:09
【问题描述】:

您好,请检查我的代码

    <dl data-bind="foreach: MobileNos"  class="morenumbeList">
                <dd><a data-bind="click: $parent.delete" class="minus">-</a><span class="number" data-bind="text: mobileno"></span>
                    <input id="itemID"  data-bind="checked: $parent.SelectPrimary,attr : { id : 'Primary_' + $index() + ''} " type="radio" name="primary"/></dd>
            </dl>

我的脚本:

var mobilenoList = function (mobileno, primary) {
    this.mobileno = mobileno;
    this.primary = primary;
};
var MobileSave = function (mobileno, primary) {
    this.mobileno = mobileno;
    this.primary = primary;
}



function AppViewModel() {
    var self = this;
    self.MobileNos = ko.observableArray();
    self.mobileno = ko.observable("");
    self.primary = ko.observable(false);
    self.itemID = ko.observable(0);

    self.SelectPrimary = ko.computed(function () {
        var mobnums = self.MobileNos();

        $.each(self.MobileNos(), function (index, mobile) {
            if (mobnums[index].primary) {
                return true;
            }
            else {
                return false;
            }
        });

    })

    self.MobileNos.subscribe(function () {
        var mobnums = self.MobileNos();
        for (var i = 0, j = mobnums.length; i < j; i++) {
            var MobileNo = mobnums[i];


            if (!MobileNo.index) {
                MobileNo.index = ko.observable(i + 1);
            } else {
                MobileNo.index(i + 1);
            }

        }
    });


    $.getJSON("/User/GetContactDetails/", { UserID: $('#UserId').val() }, function (MobileNos) {
        $.each(MobileNos.rows, function (index, mobnum) {

            self.MobileNos.push(new mobilenoList(mobnum.mobileno, mobnum.primary));
        })
     });
};

  $(document).ready(function () {
    ko.applyBindings(new AppViewModel());
  });

当我正在加载页面时,它应该是选择单选按钮,在这里我可以在“self.MobileNos”中获得正确的值,但无法根据该检查单选按钮

编辑

                        <input id="itemID" value="false"  data-bind="checked: $parent.SelectPrimary,attr : { id : 'Primary_' + $index() + ''} " type="radio" name="primary"/></dd>
       self.SelectPrimary = ko.computed(function () {
        var mobnums = self.MobileNos();

        $.each(self.MobileNos(), function (index, mobile) {
            if (mobnums[index].primary == true) {
                return "true";
            }
            else {
                return "false";
            }
        });

    })

【问题讨论】:

  • 你能解释一下SelectPrimary的逻辑吗?
  • 如果 "mobnums[index].primary" 为真,则需要设置单选按钮 cheked

标签: jquery knockout.js


【解决方案1】:

来自"checked" binding documentation

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

所以你需要:

  1. 更改您的radio 元素标记以包含value="true",因为如果您有true,您希望它被选中。
  2. 更改您的SelectPrimary 函数以返回字符串值"true""false"

您也可以查看SO question 在 KnockoutJS 中的无线电绑定

更新:

把你的SelectPrimary改成这样:

self.SelectPrimary = ko.computed(function () {
    var mobnums = self.MobileNos();
    var toreturn = mobnums.some(function (item) {
        return item.primary == true;
    });
    return toreturn.toString()
})

这里的问题是滥用$.each()。您返回的值仅在您的匿名函数内。换句话说,retuen 值仅适用于 $.each() 回调,而不适用于您的 SelectPrimary 函数。
Array.prototype.some() Browser Compatibility

【讨论】:

  • 我已经更改了单选元素标记并更改了您的 SelectPrimary 功能,但仍然没有得到响应,请检查帖子中的编辑
  • 为什么你设置你的收音机value="false"而不是value="true"
  • 我尝试了第一个 value="true" 但没有得到正确的响应,这就是为什么设置 value="false"
  • 我从您的问题中了解到,如果您的 MobileNos 数组对象中的 any 包含带有 primary 值的 primary,则应选择单选按钮。 . 对吗?
  • 如何测试是否选择了 Primary 而不是只返回那个值,因为它目前给了我最后一个值作为选择
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2016-06-03
相关资源
最近更新 更多