【发布时间】:2016-07-27 05:01:23
【问题描述】:
我有两个数组应该显示并显示为复选框列表。 主要思想是单击第一个列表的元素以将元素添加到第二个列表。 html代码是这样的
<div class="tab-pane" id="ColumnHeading">
<div class="row">
<div class="form-group span4">
<h4>Column Headings</h4>
<ul class="icons-ul" data-bind="foreach: staticItem.ColumnHeadingList.ColumnHeadingListItem" >
<li>
<div class="span2">
<input class="selectedHeading" type="checkbox" data-bind=" click: $parent.myCheck, checkedInArray: $parent.Params.Item.ColumnHeadingList.ColumnHeadingListItem, attr: { value: Value }" />
<span data-bind="text: Name"></span>
</div>
</li>
</ul>
</div>
<div class="form-group span4" style="margin-left: -90px; margin-top: 15px">
<div class="icons-ul" data-bind="foreach: Params.Item.ColumnHeadingList.ColumnHeadingListItem" >
<div class="span4">
<input type="checkbox" data-bind="customcheck: IntOnly" />
</div>
</div>
</div>
<div class="span6">
<p class="validationMessage" data-bind="validationMessage: Params.Item.ColumnHeadingList.ColumnHeadingListItem"></p>
</div>
</div>
值“IntOnly”是两个复选框列表中每个对象的属性。
我在第一个复选框列表上的单击事件的函数如下所示
self.myCheck = (function(e) {
var index = self.staticItem.ColumnHeadingList.ColumnHeadingListItem().map(function(e) { return e.Value(); }).indexOf(this.Value());
if (self.staticItem.ColumnHeadingList.ColumnHeadingListItem()[index].IntOnly() !== "Y") {
self.staticItem.ColumnHeadingList.ColumnHeadingListItem()[index].IntOnly("Y");
var o = self.staticItem.ColumnHeadingList.ColumnHeadingListItem()[index];
var flag = false;
for (i = 0; i < self.Params.Item.ColumnHeadingList.ColumnHeadingListItem().length; i++) {
if (this.Value() == self.Params.Item.ColumnHeadingList.ColumnHeadingListItem()[i].Value()) {
flag = true;
}
}
if (flag == false || self.Params.Item.ColumnHeadingList.ColumnHeadingListItem().length == 0) {
var newObject = jQuery.extend(true, {}, this);
self.Params.Item.ColumnHeadingList.ColumnHeadingListItem.push(newObject);
}
} else { //checked==true
self.staticItem.ColumnHeadingList.ColumnHeadingListItem()[index].IntOnly("N");
for (i = 0; i < self.Params.Item.ColumnHeadingList.ColumnHeadingListItem().length; i++) {
if (this.Value() == self.Params.Item.ColumnHeadingList.ColumnHeadingListItem()[i].Value()) {
self.Params.Item.ColumnHeadingList.ColumnHeadingListItem.splice(i, 1);
}
}
}
return true;
});
代码工作正常,可以将元素添加到第二个列表并将值保存在 IntOnly 因为 customcheck 函数检查 IntOnly 的值是否为“Y”以选择复选框,但我可以为第一个列表保存该属性,即使当正在获取该值并在表单发送到服务器后选中这些复选框并查看它们进行编辑。
请给点建议,对语法感到抱歉。
【问题讨论】:
-
我不太清楚想要的结果应该是什么?有一个静态的项目列表,它们都有一个复选框。如果选中一个项目,它会出现在另一个列表中,并带有另一个复选框?第二个复选框有什么用?一般建议:当您使用
checked数据绑定时,您不需要click或attr: { value: .. }数据绑定。 -
基本上我在图像上第一个有一个静态列表,该列表上的每个元素都有属性 intOpt 当我单击其中一个对象时,该对象的属性应该更改为“y”和选中的应该是真的,并且对象应该被添加到第二个列表中。工作正常,但我不知道如何使用选中的敲除来检查第二个列表中的复选框并且具有“Y”中的属性。
标签: javascript checkbox knockout.js data-binding checked