我有一个JS函数来切换gridview中所有复选框的检查状态。现在,有两个类似的网格视图,所以,想要使用相同的功能。
这是页面结构:
Radiobutton rb1,RadioButton rb2
Gridview gv1,gridview gv2。
选择rb1,仅显示gv1并隐藏gv2,反之亦然。
在页面加载时,仅检查rb1并且gv1是可见的。
当仅用于一个gridview时,JS函数可以正常工作。我把它改成了它并且它不起作用。我哪里错了。
JS:
<script type="text/javascript">
function SelectAll(chkBox)
{
var chkAll = document.getElementById(chkBox);
var elements;
var g1 = document.getElementById('<%=gv1.ClientID%>');
var g2 = document.getElementById('<%=gv2.ClientID%>');
if(g1.style.visibility=='visible')
{
elements = document.getElementById('<%=gv1.ClientID%>')
.getElementsByTagName("INPUT");
}
else if(g2.style.visibility=='visible')
{
elements = document.getElementById('<%=gv2.ClientID%>')
.getElementsByTageName("INPUT");
}
for(var i=0;i<elements.length;i++)
{
var chk;
if(elements[i]!=null)
{
if(elements[i].id.indexof('chkLeaveType')>0)
{
chk=elements[i];
chk.checked = chkAll.checked;
}
}
}
}
</script>
ASPX:
onclick =“SelectAll(this.id)”/&gt;保留类型
<asp:gridview id="gv2" runat="server">
<columns>
<asp:templatefield>
<headertemplate>
<asp:checkbox id="chkheader" runat="server" checked="true"
onclick="SelectAll(this.id)"/>Leave Type
</headertemplate>
<itemtemplate>
<asp:checkbox id="chkLeaveType" runat="server" checked="true"/>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
答案 0 :(得分:1)
我看到了几个问题:
您正在尝试(我相信)使用这段代码获取所有子复选框:
elements = document.getElementById('the grid id')
.document.getElementById("INPUT");
但是,除非我犯了很多错误,getElementById
执行它所说的内容:获取元素BY ID ,而不是标记名称。您需要getElementsByTagName
才能按标记获取元素。
此外,通过使用此代码(为强调添加了不可编辑的破折号)
document.getElementById('the grid id').document.getElementById("INPUT")
-------- --------
...你正在跳回到DOM的顶部document
,并且将从整个文档中拉出孩子,而不仅仅是你想要的网格。您可能希望尝试这样的操作,而不会跳回document
节点:
document.getElementById('the grid id').getElementsByTagName('INPUT');
最后,你可能想看一下jquery
(只是一个建议),因为它使这类事情变得更加简单。