2012-11-27 67 views
4

我创建了一个jQuery实用程序,当您从下拉列表中选择一个状态时,它会自动显示这些状态。为了更好地体验用户体验,我添加了一些逻辑来将商店分为三列。这在除IE以外的每个浏览器都能正常工作。退出循环时出现javascript错误

我不确定在控制台中显示的错误是否导致.change()事件不在IE中触发的相同错误,但我想我会提到它。那我收到的控制台错误是:

Uncaught TypeError: Cannot read property 'store_url' of undefined

下面是代码:

else if (store_remainder === 0) { 
    for(var i = 0; i < check; i++) { 
     store_col_1.append("<li class='current_store'><a href='" + data[i].store_url + "'>" + data[i].store_name + "</a></li>"); 
    } 
    for(var i = check; i < (check * 2); i++) { 
     store_col_2.append("<li class='current_store'><a href='" + data[i].store_url + "'>" + data[i].store_name + "</a></li>"); 
    } 
    for(var i = (check * 2); i <= data.length; i++) { 
     store_col_3.append("<li class='current_store'><a href='" + data[i].store_url + "'>" + data[i].store_name + "</a></li>"); 
    }  
} 

的错误出现只在最后“为”块,这使我相信,它试图运行最后一次迭代,但没有得到一个值,并返回为空。如果是这种情况,我该如何解决这个问题?

+0

你能为此创建一个[fiddle](http://www.jsfiddle.net)来演示这个问题吗? –

回答

6

此:

for(var i = (check * 2); i <= data.length; i++) { 

必须是:

for(var i = (check * 2); i < data.length; i++) { 
     //without '=' -------^ 

somearray[somearray.length]总是undefined

+1

原因在于,数组索引是基于0的,所以最高索引是'length-1'。 – GolezTrol

+0

真棒,谢谢! – skevthedev

1

for(var i = (check * 2); i<= data.length; i++)

您的错误存在于<=。更改到<

0

在您的最后一个循环,你应该使用:

for(var i = (check * 2); i < data.length; i++) 

数据[data.length]未定义

0

应该不是你最后的去我<数据.length而不是i < = data.length