这是我的javascript代码。在ASP.net C#中。早先也没错。但突然崩溃了。
我不知道出了什么问题。这段代码我想在gridview中对文本的id进行子串,并将其保存到数组中并发送到方法SetCompareID后面的c#代码以保存在cookie中。
错误:无法读取属性'儿童'未定义的
请帮助我。
function compareClick() {
var checkbox_count = 0;
var compare = [];
var grdView = document.getElementById('body_GridView1');
var intRowCount = grdView.rows.length;
if (intRowCount > 0) {
for (var i = 0; i < intRowCount; i++) {
var chkType = grdView.rows[i].cells[5].children[0];
if (chkType.type == 'checkbox')
if (chkType.checked) {
{
var txtType = grdView.rows[i].cells[0].children[0]
var newText = txtType.toString();
newText = newText.substring(newText.lastIndexOf('=') + 1);
compare.push(newText);
checkbox_count += 1;
}
}
}
PageMethods.SetCompareID(compare);
updateCookie();
$("#compare_count").html(checkbox_count);
}
}
&#13;
这是GridView1代码
<asp:GridView ID="GridView1"
runat="server" AllowPaging="True" AllowSorting="True" ShowHeader="False" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" Width="100%">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField Visible="false">
<ItemTemplate>
<asp:Label ID="id" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="25%">
<ItemTemplate>
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("id","~/detail.aspx?id={0}") %>'>
<img src='<%# Eval("image") %>' alt="Read online" />
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="id" ItemStyle-Width="20%" ItemStyle-Font-Size="21px" DataNavigateUrlFormatString="detail.aspx?id={0}" DataTextField="name"></asp:HyperLinkField>
<asp:TemplateField ItemStyle-Font-Size="17px">
<ItemTemplate>
<%# Eval("detail").ToString().Length>150 ? (Eval("detail") as string).Substring(0,150)+"..." : Eval("detail") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="rent" ItemStyle-Width="8%" ItemStyle-Font-Size="17px" DataFormatString="ค่าเช่า {0} ต่อเดือน" SortExpression="rent"></asp:BoundField>
<asp:BoundField DataField="deposit" ItemStyle-Width="10%" ItemStyle-Font-Size="17px" DataFormatString="ค่ามัดจำ {0} บาท" SortExpression="deposit"></asp:BoundField>
<asp:TemplateField ItemStyle-Width="14%">
<ItemTemplate>
<asp:CheckBox runat="server" ID="compareRow" Text="เปรียบเทียบ" onclick="compareClick()" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FE0048" ForeColor="#D85709" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
答案 0 :(得分:0)
无法读取undefined的值只意味着一件事,值没有设置,所以在你的情况下,它是两件事之一:
cells[5].children[0];
grdView.rows[i].cells[0].children[0]
cells[5]
不存在,或者cells[0]
不存在,请检查行号,然后您就会知道导致问题的值。
最可能的,当然是ceslls[5]
。
你可以做点什么:
var chkType = if(grdView.rows[i].cells[5])grdView.rows[i].cells[5].children[0];
如果错误停止发生,则肯定是值错误,您可以调查它未设置的原因。