【发布时间】:2013-10-08 03:59:39
【问题描述】:
我有一个自定义控件,它基本上是一个 Gridview,它的第一列是一个 TemplateField,标题中有一个复选框,每行都有一个复选框。单击标题复选框应该调用一些 javascript 来切换显示的每一行中的每个复选框...众所周知,这是一个常见的要求。
我的问题是(稍后我将详细介绍)当我在同一页面上有 2 个这些控件时,我单击选择所有 chkbox 的复选框时,页面调用了错误的 javascript 位(其中仅在呈现的 html 页面上出现一次)并检查错误网格上的所有复选框!
这是我的代码:
<asp:TemplateField>
<HeaderTemplate>
<input type="checkbox" ID="chkSelectAll" onclick="SelectAllCheckboxes(this)"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="chkSelected"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
Javascript:
<script>
function SelectAllCheckboxes(chk) {
$('#<%=gridPublishers.ClientID%>').find("input:checkbox").each(function ()
{
if (this != chk) { this.checked = chk.checked; }
});
}
</script>
因此,父页面上有 2 个这样的控件。第一个网格显示所有发布者,另一个显示从第一个网格中选择的发布者...
<h2>Selected Publishers</h2>
<cac:GridPublishers id="GridSelectedPublishers" runat="server" CssClass="GridSelectedPublishers" BindSource="DynamicFromSession" ShowMultiSelectCol="true" ShowFilterControls="false" NoRecordsMessage="No Publishers have been selected yet." />
<br /><br />
<h2>All Publishers</h2>
<cac:GridPublishers id="GridPublishers" runat="server" ShowMultiSelectCol="true" CssClass="GridPublishers" />
正如我之前所说,javascript 只在呈现的 html 页面上出现一次(我明白为什么),但我怎样才能让自定义控件的每个实例调用它自己的 javascript(或替代方法),以便它只切换它自己的复选框??
...
我还尝试添加 2 个 javascript 事件并在网格绑定上尝试找到主复选框并为其分配正确的 JS 函数,但我已经搜索了标题行的每个单元格和 col 0(控件应该在哪里be) 拥有 0 个控件。
...
我还尝试添加一个隐藏按钮,在页面加载时,我可以为其分配正确的 javascript 函数(这将影响正确的 gridview),然后主复选框触发隐藏按钮 onClientClick 事件,但随着页面重新加载,它会混淆并触发两次点击事件,并且显然来自两个网格!
请帮忙!!
【问题讨论】:
标签: c# javascript asp.net gridview custom-controls