无法获取属性“length”的值:object为null或undefined - Javascript Error

时间:2012-02-29 07:57:37

标签: c# javascript

在我的用户控件中,有一个GridView。 当我在GridView的标题中选中复选框时,我想选中所有复选框。 我的用户控件可以在页面中多次使用。 所以我尝试这样。

我的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

我的代码有什么问题?

3 个答案:

答案 0 :(得分:2)

参数网格是网格视图的id(字符串),这意味着您没有“全部”。长度适用于“网格”。您没有从c#传递对象。

您需要找到客户端的所有复选框,并根据true或false值设置check。

答案 1 :(得分:1)

数组从0开始:

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

答案 2 :(得分: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;
    }
}