在 aspx 页面中,有一个网格视图,它有复选框的模板控件,像这样
<asp:gridview .....
<columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
...
现在,如果我写类似
$(#'<%=chkSelect.ClientID%>').something( function() {});
我收到一条错误消息,说'chkSelect 在当前上下文中不存在,这很明显,因为加载griddata 时该元素将存在,我所做的是将复选框的更改事件绑定到委托..
$("body").delegate(":checkbox", "change", function () {
custList = $(':checkbox:checked').map(function () { return $(this).closest('tr').find('.grdCustName').text() }).get();
$('#<%=hdnFromCustomer.ClientID %>').val(custList);
}
这再次正常工作,问题是我需要知道具有特定 id 的复选框(例如此处,chkAll
)是否已更改(单击),然后选择所有复选框,全部检查不是问题,我可以这样做有类似的$(':checkbox').attr(checked, 'on')
东西。
但问题是,如果我写
$('#<%=chkAll.ClientID %>')
,它不允许我这样做,因为此复选框在启动时不存在于 DOM 中,但当用户单击showReport
按钮并填充网格时将可用。
所以,基本上,我的问题是如何选择,或者我应该使用什么选择器来选择 DOM 中不存在但将来某个时间会存在的这个复选框(或任何其他元素)?
编辑:针对某些答案,问题不具有约束力,我delegate()
已经通过 using 完成了,我也可以通过使用.on()
or完成.live()
。问题就像Felix Kling
评论一样,他一针见血,(阅读他的评论和我对他的回复)。问题是页面启动时 DOM中不存在该元素。它是在用户单击showReport
按钮时动态构建的,并且 gridview 会填充数据,这就是创建此元素的位置。虽然我描述的方法Yoeri
可能/可能不起作用,但我想知道是否有任何可能的方法(当然是 jQuery!)我可以选择这种情况下描述的这样一个元素,还是我唯一的选择是寻找类似Yoeri
答案的替代方案?