Javascript 复选框集合

Javascript 复选框集合,javascript,knockout.js,Javascript,Knockout.js,我有一个项目列表,我想显示所选项目的总数。 项目列表显示两次,因此,如果我选中第一个列表中的某个项目,则也会选中第二个列表中的同一项目。 问题是它不计算总和(它显示Nan) 功能项(id、名称、价格){ this.id=id; this.name=名称; 这个价格=价格; } 变量列表项=[ 新项目(1,‘项目1’、25), 新项目(2,‘项目2’、30), 新项目(3,‘项目3’、50) ]; 函数viewModel(){ var self=这个; self.items=ko.observe

我有一个项目列表,我想显示所选项目的总数。 项目列表显示两次,因此,如果我选中第一个列表中的某个项目,则也会选中第二个列表中的同一项目。 问题是它不计算总和(它显示Nan)

功能项(id、名称、价格){
this.id=id;
this.name=名称;
这个价格=价格;
}
变量列表项=[
新项目(1,‘项目1’、25),
新项目(2,‘项目2’、30),
新项目(3,‘项目3’、50)
];
函数viewModel(){
var self=这个;
self.items=ko.observearray(列表项);
self.selectedItem=ko.observatarray();
self.Total=ko.computed(函数(){
var计数=0;
ko.utils.arrayForEach(self.selectedItem(),函数(r){
计数+=r.价格;
});
返回计数;
});
};
应用绑定(新的viewModel())


我修改了您的示例:

功能项(id、名称、价格){
this.id=id;
this.name=名称;
这个价格=价格;
this.checked=ko.可观察(假);
}
变量列表项=[
新项目(1,‘项目1’、25),
新项目(2,‘项目2’、30),
新项目(3,‘项目3’、50)
];
函数viewModel(){
var self=这个;
self.items=ko.observearray(列表项);
self.Total=ko.computed(函数(){
//return self.items().filter(函数(item){return item.checked();}).length;
return self.items().reduce(函数(sum,item){return item.checked()?sum+item.price:sum;},0);
});
};
应用绑定(新的viewModel())


正如我已经评论过的,
r.price
中的
r
是一个整数,而不是一个对象。因此,您将获得
NaN
。尝试改用
count+=r
。下面的代码描述了相同的情况

功能项(id、名称、价格){
this.id=id;
this.name=名称;
这个价格=价格;
}
变量列表项=[
新项目(1,‘项目1’、25),
新项目(2,‘项目2’、30),
新项目(3,‘项目3’、50)
];
函数viewModel(){
var self=这个;
self.items=ko.observearray(列表项);
self.selectedItem=ko.observatarray();
self.Total=ko.computed(函数(){
var计数=0;
ko.utils.arrayForEach(self.selectedItem(),函数(r){
console.log(r)
计数+=r;
});
返回计数;
});
};
应用绑定(新的viewModel())


您是否尝试过记录
r
。它是一个整数,不是一个对象。不确定。你想看第二份重复的检查表吗?嗨,我不想数一数。我想找到已检查的总数