如何根据knockout js中的数组值检查复选框

时间:2014-02-24 14:52:28

标签: javascript knockout.js

我在做淘汰赛。我有一个来自数据库的数组列表,通过进行ajax调用并保存knockout observable数组中的所有值。

我正在遍历数组。根据我要检查或取消选中复选框的值。以下是我的工作方式,但这似乎不起作用。我可以在数组中看到roleid的值,但如果roleid的值为true,则不会检查复选框。我在这做错了什么。

<tbody data-bind="foreach:$root.test">
 <tr>       
    <div><input type="checkbox" value="1" data-bind="checked: roleid == 1"/></div> 
 </tr>
</tbody>

3 个答案:

答案 0 :(得分:2)

我认为角色需要是可观察的。然后你可以使用

roleid() === 1

roleid() === true

适合您的情况。

答案 1 :(得分:0)

如果roleid是一个可观察的并且设置为字符串值,那么这将起作用。

knockout“checked”仅比较字符串值与字符串值,因此value =“1”内的值被视为字符串。

因此,如果roleid设置为

,则会检查您的复选框

viewModel.roleid = ko.observable(“1”);

答案 2 :(得分:0)

您可以使用 checkedValue 绑定,并可以将observableArray分配给已检查绑定。

来自文档

如果绑定还包含checkedValue,则定义checked对象使用的值而不是element的value属性。如果您希望值不是字符串(例如整数或对象),或者您希望动态设置值,那么这非常有用。

以下是javascript代码:

function viewModel()
{
   var self = this;

   //the array list which you can get from the server 
   self.items = ko.observableArray([
            { item: '1' },
            { item: '2' },
            { item: '3' },
            { item: '4' }
        ]);

   //the array of items which you want to be checked 
   self.chosenItems = ko.observableArray(
     [
       self.items()[1],
       self.items()[3]
     ]
   );
}

Html代码

<div data-bind="foreach: items">
    <input type="checkbox" 
           data-bind="checkedValue: $data, checked: $root.chosenItems" />
    <span data-bind="text: item"></span><br />
</div>

here是Js小提琴演示使用。