在jQuery中选择
请参见以下标记在jQuery中选择,jquery,jquery-selectors,Jquery,Jquery Selectors,请参见以下标记 <div style="width: 30%;"> <asp:Repeater ID="rptParent" runat="server" OnItemDataBound="rptParent_ItemDataBound"> <ItemTemplate> <table id="tblRoleHdr" style="border-style: solid; border-width: 1px;
<div style="width: 30%;">
<asp:Repeater ID="rptParent" runat="server" OnItemDataBound="rptParent_ItemDataBound">
<ItemTemplate>
<table id="tblRoleHdr" style="border-style: solid; border-width: 1px;
border-color: Red;">
<tr>
<td style="width: 1%;">
<asp:CheckBox ID="chkRoleHdr" runat="server" />
</td>
<td style="width: 50%;">
<asp:HiddenField ID="hidRoleID" runat="server" Value='<%#Eval("RoleID") %>' />
<asp:Label ID="lblRole" runat="server" Text='<%#Eval("Role") %>'></asp:Label>
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP1Hdr" runat="server" CssClass="chkP1Hdr" />
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP2Hdr" runat="server" CssClass="chkP2Hdr" />
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP3Hdr" runat="server" CssClass="chkP3Hdr" />
</td>
</tr>
</table>
<asp:Repeater ID="rptChild" runat="server">
<HeaderTemplate>
<table id="tblChild" class="tblChild" style="border-style: solid; border-width: 1px;
border-color:Green;">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="width: 1%;">
</td>
<td style="width: 50%;">
<asp:HiddenField ID="hidUserID" runat="server" Value='<%#Eval("UserID") %>' />
<asp:Label ID="lblUser" runat="server" Text='<%#Eval("User") %>'></asp:Label>
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP1Child" runat="server" CssClass="chkP1Child" />
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP2Child" runat="server" CssClass="chkP2Child"/>
</td>
<td style="width: 1%;">
<asp:CheckBox ID="chkP3Child" runat="server" CssClass="chkP3Child" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
</div>
它将生成以下输出
在jQuery中我需要做的是
请您查看我为复选框指定的类。如何使用jQuery完成任务 这应该可以让你开始了。这将侦听任何检查过的支票盒。如果该复选框具有类chkP1Hdr,并且已选中,则它将选中所有chkP1Child子项
$("input[type='checkbox']").change(function () {
if ($(this).hasClass("chkP1Hdr") && this.checked)
$(".chkP1Child").attr("checked", true);
if ($(this).hasClass("chkP2Hdr") && this.checked)
$(".chkP2Child").attr("checked", true);
if ($(this).hasClass("chkP3Hdr") && this.checked)
$(".chkP3Child").attr("checked", true);
});
以此类推,对于2和3,如果可以稍微更改标记,可以使用一些额外的类和数据属性来获得想要的效果。首先,每个需要由组/列自动选择的复选框都需要一个组级和/或列级类。例如:
<input type="checkbox" class="groupA column3" />
您可以在中看到一个工作示例。不要使用
$(this).attr(“checked”)
获取checked
属性的当前状态。改用这个。选中,因为它避免了额外的开销。另外,attr()
实际上并没有提供属性,而是提供属性值,因此如果要使用jQuery,.prop()
更合适。他们试图更正1.6
中的.attr()
方法,以便它只适当地处理属性,但为时已晚,因此,由于大量代码被破坏,他们立即回滚了1.6.1
@RightSaidFred中的大部分更改-我切换了它,谢谢。我可以理解为什么这个.checked可以避免开销,但是你能解释一下你所说的不是真正给你属性,而是属性值吗?属性值不是我想要的吗?我不想检查已检查属性值的真实值吗?@RightSaidFred-抱歉,再仔细想想……已检查属性值和已检查属性之间有什么区别?后者不控制前者吗?关于你的第一个评论,是的,你想要选中的属性。这是我用attr()
方法解释问题的笨拙过渡。我的观点是,attr()
看起来像是在给你属性,但有时它会给你属性。如果选择“否”,则属性更改时,属性保持不变。因此它与ID属性/属性不同@RightSaidFred-如果属性在更改时保持不变,我想这就是您说使用this.checked
读取值的原因之一。因为那永远是对的。另外,我是否正确理解要更改选中的属性,您应该使用attr函数,以便属性和属性都正确?为什么我得到两个否决票…所有项目都是动态创建的。我不能硬编码“GroupA”,比如。。?
<input type="checkbox" class="groupHeading" data-group="GroupA" />
<input type="checkbox" class="columnHeading" data-group="GroupA" data-column="Column3" />
// Handle group heading change
$('.groupHeading').change(function () {
// Set checked state to all checkboxes with class matching data-group
$('.'+$(this).data('group')).attr('checked', $(this).is(':checked'));
});
// Handle column heading change
$('.columnHeading').change(function () {
// Set checked state to all checkboxes with class matching data-group and data-column
$('.'+$(this).data('group')+'.'+$(this).data('column')).attr('checked', $(this).is(':checked'));
});