【发布时间】:2020-08-28 05:40:24
【问题描述】:
我正在尝试使 GridView 中的复选框更易于用户检查。我添加了一些 jQuery 以使 <td> 元素可点击并选中复选框。那部分有效。问题是,当用户单击实际的复选框时,它不会检查。当我调试我的代码时,似乎 .is(":checked") 没有正确返回。任何帮助将不胜感激。
我的 GridView 项目模板
<asp:TemplateField HeaderText="Select" ItemStyle-Width ="5%"
ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="chk" >
<ItemTemplate>
<asp:CheckBox id="chkBxPSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
我还尝试将复选框包装在标签和锚标签中,但无济于事。
<asp:TemplateField HeaderText="Select" ItemStyle-Width ="5%" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="chk" >
<ItemTemplate>
<label style="display:block;">
<asp:CheckBox ID="chkBxPSelect" runat="server" />
</label>
</ItemTemplate>
我的 jQuery
$(".chk").click(function (e)
{
var checkBox = $(this).find("input:checkbox:first");
if (checkBox.is(":checked"))
{
checkBox.prop("checked", false);
}
else
{
checkBox.prop("checked", true);
}
});
有什么想法吗?
编辑 我也尝试在复选框本身添加一个点击。似乎总是使用 `.is(":checked") 检查复选框是否被选中并不会报告复选框的正确状态。
$('input[id$="chkBxPSelect"]').click(function ()
{
if ($(this).is(":checked"))
{
$(this).prop("checked", false);
}
else
{
$(this).prop("checked", true);
}
});
与 我也试过这个,形成下面的建议。
$('input[id$="chkBxPSelect"]').click(function ()
{
e.preventDefault();
//e.stopPropagation();
});
单击实际复选框时,该复选框仍然不会检查。
【问题讨论】:
-
“.chk”是你的复选框类吗?如果是这样,你为什么要找另一个复选框?,使用 $(this) 应该给你实际的实例(点击的复选框)然后你可以通过使用 $(this).val()
-
这个类“.chk”是什么?
-
.chk 是我添加到 ItemTemplate 的类。它在上面的代码中。我在 CSS 中使用它来将光标更改为指针,并让 jQuery 访问呈现的
<td>元素。复选框位于 GridView 中。 -
您可能还需要向复选框添加点击处理程序,并执行 e.preventDefault() 或 e.stopPropagation()。听起来复选框中的单击正在起作用,但正在冒泡到 td 元素,然后它正在反转复选框上的检查操作。
标签: c# jquery asp.net checkbox