Javascript 剔除复选框-仅将选中的值推入数组

Javascript 剔除复选框-仅将选中的值推入数组,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个动态填充的复选框控件 <!-- ko foreach: AllPens --> <label> <input type="checkbox" data-bind="checked: IsChecked" /> <span data-bind="text: name"></span> </label> <!-- /ko --> 我必须发回一个选中元素的数组- "Pens": [{

我有一个动态填充的复选框控件

<!-- ko foreach: AllPens -->
<label>
    <input type="checkbox" data-bind="checked: IsChecked" />
    <span data-bind="text: name"></span>
</label>
<!-- /ko -->
我必须发回一个选中元素的数组-

"Pens": [{
    "PenType": "001",
    "Order": false
}, {
    "PenType": "002",
    "Order": true
}]
我有一个粗略的想法来存储检查过的笔的代码,如果在对象中检查过-新笔('001',true)

如何将复选框值绑定到对象上的敲除ObservalArray

我相信,如果我明白了以上的话,下面的方法应该是有效的

self.Pens= ko.computed(function()
{
    var selectedPens = [];
    ko.utils.arrayForEach(self.Pen(), function (pen) {
        if(pen.IsChecked())
            selectedPens.push(pen);
    });
    return selectedPens;
});

我还在学习。非常感谢您的帮助:)

您的代码应该是这样的

self.checkedPens = function(pen) {
    var isChecked = pen.order === "true";
    if (pen.penType !== null && isChecked) {
        self.Pens.push({
            PenType: pen.penType,
            Order: isChecked
        });
    }
};

我设法让它工作起来了

我没有直接将键值对动态填充到Self.AllPens(),而是创建了一个函数将笔列表加载到对象中

    function Pen(type,name,checked) {
        var self = this;

        self.PenType= ko.observable(type);
        self.Name = ko.observable(name);
        self.IsChecked = ko.observable(checked || false);            
    }
并循环通过以检查下面的检查-

        self.Pens= ko.computed(function () {
            var selectedPens = [];
            ko.utils.arrayForEach(self.AllPens(), function (pen) {
                if (pen.IsChecked()) {
                    selectedPens.push({
                        PenType: pen.penType,
                        Order: pen.IsChecked()
                    });
                }
            });
            return selectedPens ;
        });

我是否应该使用
$parent.chosenItems
检查复选框是否已选中?我想是的,但不确定是否首先尝试调试代码,或者如果得到的值超出您的使用范围,请尝试使用控制台进行检查。
    function Pen(type,name,checked) {
        var self = this;

        self.PenType= ko.observable(type);
        self.Name = ko.observable(name);
        self.IsChecked = ko.observable(checked || false);            
    }
        self.Pens= ko.computed(function () {
            var selectedPens = [];
            ko.utils.arrayForEach(self.AllPens(), function (pen) {
                if (pen.IsChecked()) {
                    selectedPens.push({
                        PenType: pen.penType,
                        Order: pen.IsChecked()
                    });
                }
            });
            return selectedPens ;
        });