我有一个有分组的网格,即网格显示组的产品。因此,该结构具有Group及其子。同样的方式我会有一些其他组和他们的孩子,我在下面绑定。我想检查并取消选中父母点击的整个子列表。
CSHTML
@{
if (Model.List.Count() > 0)
{
<table>
<tr>
<input type="checkbox" class="cls@(obj.GroupId)" name="@obj.GroupId" onclick="checkUncheckAll(this.class)" />
<td>Name</td>
</tr>
@foreach (var obj in Model.subList)
{
<tr>
<td>
<input type="checkbox" class="cls@(obj.GroupId)" name="@obj.GroupId" /></td>
</td>
<td>
@obj.Name
</td>
</tr>
</table>
}
}
<input type="button" value="Save" onclick="PickAllCheckedRows();" />
我一直试图像下面这样做,但没有成功。此外,我想点击保存按钮选择所有已检查的组及其子项。任何帮助都会非常感激。
<script type="text/javascript">
function checkUncheckAll(sender) {
alert(sender);
var chkElements = document.getElementsByClassName('chkItems');
for (var i = 0; i < chkElements.length; i++) {
chkElements[i].checked = sender.checked;
}
}
function PickAllCheckedRows() {
}
</script>
答案 0 :(得分:1)
您正在通过undefined
调用您的函数,因为您正在通过this.class
:
onclick="checkUncheckAll(this.class)"
元素没有class
属性(他们确实有className
),如果他们有,你不会&#39;想要传递类,您希望传递元素本身,因为您将其用作sender.checked
。
只需从通话中删除.class
即可。
如果您尝试在群组中进行所有,那么在获取其他复选框以检查/取消选中时,您需要在该功能中使用className
:
function checkUncheckAll(sender) {
var chkElements = document.getElementsByClassName(sender.className);
// Note ------------------------------------------------^^^^^^^^^^
for (var i = 0; i < chkElements.length; i++) {
if (chkElements[i] !== sender) { // Not strictly necessary I guess, but...
chkElements[i].checked = sender.checked;
}
}
}
假设你只会在&#34; all&#34;复选框。