【发布时间】:2014-01-06 20:51:45
【问题描述】:
我在更新面板(网络表单)中有一个网格视图。网格视图有一个标题复选框,因此当您单击标题复选框时,它会检查其下方的所有项目复选框,如下所示:
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="HeaderLevelCheckBox" runat="server"
onclick="toggleSelection(this);" ToolTip="Select / Deselect all rows?" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelector" runat="server" ToolTip="Select row?" />
</ItemTemplate>
</asp:TemplateField>
注意函数调用onclick="toggleSelection(this);" 如下所示:
function toggleSelection(source) {
$("#MainContent_gvCG input[id*='chkSelector']").each(function (index) {
$(this).attr('checked', source.checked);
if (source.checked)
$(this).css({ backgroundColor: "yellow" });
else
$(this).css({ backgroundColor: "" });
});
}
这是在 script 标签内的 document.ready 之后声明的。当我最初加载页面并单击标题复选框时,gridview 中的所有行也被选中(很好......工作)。如果我取消选中它,所有行都未选中(很好)。当我再次点击它的那一刻,UI 并没有改变(所有项目都没有按应有的方式检查)。
我很好奇,在检查标记时也是正确的,当我单击标题以检查它是否为真时,我得到检查的行项目:
<input id="MainContent_gvCG_chkSelector_5" type="checkbox" name="ctl00$MainContent$gvCG$ctl08$chkSelector" style="background-color: rgb(255, 255, 0);" checked="checked">
当我取消选中标题时,它会像这样正确响应:
<input id="MainContent_gvCG_chkSelector_5" type="checkbox" name="ctl00$MainContent$gvCG$ctl08$chkSelector" style="">
我的问题是 UI 没有改变,这意味着即使标记显示为已选中,复选框也不会显示为已选中。这是因为在更新面板中吗?
我能做些什么来解决这个问题?
【问题讨论】:
-
尝试使用 jQuery prop 而不是 attr,它接受 bool 值而不是 attr/removeAttr 检查
-
@Irvin 是的,可以工作
$(this).prop('checked', source.checked);
标签: javascript jquery asp.net gridview checkbox