对多个GridView使用一个Javascript函数

时间:2013-12-14 14:04:45

标签: javascript asp.net c#-4.0

我有一个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>

1 个答案:

答案 0 :(得分:1)

我看到了几个问题:

  1. 您正在尝试(我相信)使用这段代码获取所有子复选框:

    elements = document.getElementById('the grid id')
        .document.getElementById("INPUT");
    

    但是,除非我犯了很多错误,getElementById执行它所说的内容:获取元素BY ID ,而不是标记名称。您需要getElementsByTagName才能按标记获取元素。

  2. 此外,通过使用此代码(为强调添加了不可编辑的破折号)

       document.getElementById('the grid id').document.getElementById("INPUT")   
       --------                               --------
    

    ...你正在跳回到DOM的顶部document,并且将从整个文档中拉出孩子,而不仅仅是你想要的网格。您可能希望尝试这样的操作,而不会跳回document节点:

    document.getElementById('the grid id').getElementsByTagName('INPUT');
    
  3. 最后,你可能想看一下jquery(只是一个建议),因为它使这类事情变得更加简单。