学无止境

Life-long learning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

让GridView中CheckBox列也支持FireFox

Posted on 2008-08-12 09:40  anytime8  阅读(220)  评论(0编辑  收藏  举报

<script language=”javascript type=”text/javascript>   

 function selectAll(obj)
   {
        
var theTable  = obj.parentElement.parentElement.parentElement;
        
var i;
        
var j = obj.parentElement.cellIndex; 
        
for(i=0;i<theTable.rows.length;i++)
       {
            
var objCheckBox = theTable.rows[i].cells[j].firstChild;
            
if(objCheckBox.checked!=null)objCheckBox.checked =
    
</script>

 

<asp:GridView ID=”GridView1″ runat=”server” AllowPaging=”True"

 AutoGenerateColumns=”False”
        DataKeyNames
=”id” DataSourceID=”AccessDataSource1″ 

AllowSorting=”True” OnDataBinding=”GridView1_DataBinding”
 OnRowDataBound=”GridView1_RowDataBound”>
           
<Columns>
              
<asp:TemplateField>
                   
<ItemTemplate>
                       
<asp:CheckBox ID=”CheckBox1″ runat=”server”
 Checked=”True” Text=’<%#DataBinder.Eval(Container.DataItem,”id”) %>’ />
                   
</ItemTemplate>
                    
<HeaderTemplate>
                        
&nbsp;<input id=”CheckAll” type=”checkbox onclick=”selectAll(this);” />全选    </HeaderTemplate>              
<asp:BoundField DataField=”id” HeaderText=”id” InsertVisible=”False” ReadOnly=”True”    

 SortExpression=”id” />
  
<asp:BoundField DataField=”name” HeaderText=”name” SortExpression=”name” /> 
  
<asp:BoundField DataField=”sex” HeaderText=”sex” SortExpression=”sex” /> 
  
<asp:BoundField DataField=”deptid” HeaderText=”deptid” SortExpression=”deptid” /> 
            
</Columns> 
        
</asp:GridView>  

 js代码中的selectAll(obj)方法在IE中可以正常使用。昨天,一朋友做测试,发现在FireFox中不支持,让我帮着找找原因,估计是js的代码有不兼容Firefox的,查有关资料,原来在firefox不支持parentElement,但支持parentNode,于是把原来的js代码修改了一下,通过obj.parentNode.parentNode.parentNode 来获取表格对象(GridView编译后形成的表格),不过要找到CheckBox对象要麻烦点,因为没法通过obj.parentElement.cellIndex 来定位找到ChecKbox所在位置了,只能通过循环某一行的单元格来查找了。具体的代码如下:

function select_all(obj)   
{   
    
var theTable  = obj.parentNode.parentNode.parentNode;   
    
var j = obj.parentNode.cellIndex;   
  
    
for(var i=0; i<theTable.rows.length; i++)   
    {   
        
var objCheckBox = GetCheckBoxObj(theTable.rows[i].cells[j]);   
        
if(objCheckBox.checked != null)   
            objCheckBox.checked 
= obj.checked;   
    }   
}  

 

function GetCheckBoxObj(objCell)   
{   
       
for(var i= 0; i < objCell.childNodes.length; i++)   
       {   
           
if(objCell.childNodes[i].id)   
           {   
                
return objCell.childNodes[i];   
           }   
       }   
}   
  

如此修改后,这个checkbox就可以兼容IE和FireFox