我的标题中有GridView
CheckBox
,每行有另一个:
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<input type="checkbox" onclick="checkAll(this.checked)" />
</HeaderTemplate>
<ItemTemplate>
<input name="checkSelect" type="checkbox" value='<%# Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我想让master复选框(un)检查所有其他人。
所以我有JavaScript
功能:
function checkAll(checked) {
var grid = document.getElementById("<%= gridViewStatement.ClientID %>");
for (i = 1; grid.rows.length - 1; i++) {
grid.rows[i].getElementsByTagName("input")[0].checked = checked;
}
}
如果我把它放在<script>
标签内,它的作品
<script type="text/javascript" language="javascript">
</script>
如果我把功能放在文件中
<script type="text/javascript" language="javascript" src="scripts.js"></script>
它停止工作!在根目录中输入,名称写得正确。
我做错了什么?
P.S。有什么我可以改进我的功能吗?
P.P.S。我使用HtmlCheckBox
而不是asp:CheckBox
,因为我将每个绑定到列'ID'并获取Request.Form
中的ID列表。我是对的吗?
答案 0 :(得分:4)
你的脚本扼杀了什么,恕我直言:
var grid = document.getElementById("<%= gridViewStatement.ClientID %>");
您正在混合服务器端和客户端代码。由于首先呈现服务器端代码,如果该行存在于ASPX页面内,则<%= gridViewStatement.ClientID %>
的值会及时评估,以供JavaScript使用。通过将其放入稍后包含的文件中,您可以确保不会解释该值。
这是一个简短的解决方案:
在ASPX的顶部包括以下几行:
<script type="text/javascript" language="javascript">
var gridID = "<%= gridViewStatement.ClientID %>";
</script>
<script type="text/javascript" language="javascript" src="scripts.js"></script>
将函数的第一行更改为:
var grid = document.getElementById(gridID);
答案 1 :(得分:2)
您的脚本包含一个引用gridViewStatement.ClientID,它在asp.net页面上作为内联脚本进行评估。如果你把它放在一个外部文件中,这将不会被评估,并且该脚本文本将在客户端的javascript文件中,这不会起作用,因为它没有正确的id
答案 2 :(得分:1)
感谢LorenVS !!
<input type="checkbox" onclick="checkAll('<%= gridViewStatement.ClientID %>', this.checked)" />
和
function checkAll(grid, checked) {
var grid = document.getElementById(grid);
for (i = 1; grid.rows.length - 1; i++) {
var row = grid.rows[i];
row.getElementsByTagName("input")[0].checked = checked;
}
}
答案 3 :(得分:1)
正如LorenVS所说。您可以更改ASPX,以便将网格的客户端ID传递给javascript函数:
<input type="checkbox"
onclick='checkAll(this.checked, "<%= gridViewStatement.ClientID %>")' />
然后更改您的函数以将网格的客户端ID作为参数:
function checkAll(checked, gridId) {
var grid = document.getElementById(gridId);
...
}
}