2012-02-29 104 views
0

在我的用户控件中,有一个GridView。 当我检查GridView标题中的复选框时,我想选中所有复选框。 我的用户控件可以在页面中多次使用。 所以我尝试这样。无法获取属性“长度”的值:对象为空或未定义 - Javascript错误

我的GridView

<asp:GridView ID="GridView" runat="server"> 
    <Columns> 
     <asp:TemplateField> 
      <HeaderTemplate> 
       <asp:CheckBox ID="chkHeader" runat="server" /> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkEach" runat="server" /> 
      </ItemTemplate> 
      . 
      . 

这是我的C#代码

CheckBox chkAll = gvAttachment.Controls[0].Controls[0].FindControl("chkHeader") as CheckBox; 
    if (chkAll != null) 
    { 
      chkAll.Attributes.Add("onclick", "SelectAllChkBox('" + chkAll.ClientID + "','" + GridView.ClientID + "');"); 
    } 

这是我的javascript

function SelectAllChkBox(value , grid) { 
    for (var i = 1; i < grid.all.length; i++) { 
     grid.all[i].checked = value.checked; 
    } 
} 

但我得到这个错误。

Unable to get value of the property 'length': object is null or undefined 

我的代码有什么问题?

回答

1

阵列从0开始:

function SelectAllChkBox(value , grid) { 
    for (var i = 0; i < grid.all.length; i++) { 
     grid.all[i].checked = value.checked; 
    } 
} 
+0

grid.all是不确定的... – Asken 2012-02-29 08:04:08

+0

什么,我认为是有根本没有“所有”属性,但我不知道你正在使用的对象。试着找出是否有'全部'属性。 – Codebeat 2012-02-29 09:15:11

+0

我认为,根本没有“全部”属性,但我不知道您使用的对象。试着找出是否有'全部'属性。使用Firebug浏览DOM并调试您的代码。 – Codebeat 2012-02-29 09:17:14

2

参数网格是,这意味着你不具有“所有”的网格视图的id(字符串)。虽然长度在“网格”上有效。你不是从c#传入一个对象。

您将需要找到所有复选框客户端和基于true或false值检查设置。

+1

我建议使用像jQuery这样的库来简化任务:'$(grid).find(“input [type ='checkbox']”)。attr('checked',true);' – 2012-02-29 08:10:56

+0

这个是OK为了我。但不幸的是,我无法使用它。 'function SellectAllChkBox(value){var grid = document.getElementById(“<%= gvAttachment.ClientID%>”); for(var i = 1; i kevin 2012-02-29 09:22:34

+0

解释一些......为什么你不能这样做? – Asken 2012-02-29 09:30:27

0

试试这个功能

function SelectAllChkBox(value , grid) { 
    var n = document.getElementById("grid").rows.length; 
    for (var i = 0; i < n; i++) { 
     grid.all[i].checked = value.checked; 
    } 
} 
+0

代码不完整。在for循环内仍然会失败。 – Asken 2012-02-29 08:42:23

+0

是的,我得到了同样的错误。 – kevin 2012-02-29 09:21:56

相关问题