2012-11-02 31 views
1

当我运行以下javascript时,input_array[input_array.length] = id;未被注释掉时失败。任何人都可以看到是什么造成这个?当填充数组时,javascript失败

function cat_images_low_lag() { 
    var input_array = new array(); 

    cat_images = $(".category-description").next().find("img"); 
    cat_images.each(function() { 
     url = $(this).parent().attr("href"); 
     id = url.split("id="); 
     id = id[1]; 

     input_array[input_array.length] = id; 
    }); 
    alert ("trst"); 
    alert(input_array.join("\n")); 
} 

干杯!

+4

这应该是'Array',资本 “A”,或更好,但只'VAR input_array = [];' – Pointy

+1

你也应该宣布 “ID” 和 “URL”与'var' !! – Pointy

回答

3

第一件事就是更换:

var input_array = new array(); 

有了:

var input_array = new Array(); 

,并以此来插入:

input_array.push(id); 

或者直接添加:

input_array[input_array.length] = id; 

其他方式初始化数组:

var input_array = []; 
+2

甚至'var input_array = []' – HBP

+0

@HBP是的,你可以...... :)也加了! :) –

+1

忘了javascript是区分大小写的! –

0

你的数组初始化是不正确

var input_array = new array(); 

您应该使用速记

var input_array = []; 

var input_array = new Array(); 

此外,为了避免cat_images是在全球范围内的变量,你可能要考虑本地作用域像这样

var cat_images = $(".category-description").next().find("img"); 
+4

在JavaScript中,索引大于数组长度是可以的。该语言明确支持。 – Pointy

+0

@Pointy - 噢,谢谢你的澄清。 –

1

另一些人指出的资本化问题,但因为你是使用jQuery,一个更好的办法建立数组是这样的:

function cat_images_low_lag() { 
    var input_array = $(".category-description + * img").map(function() { 
     return this.parentNode.href.split("id=")[1]; 
    }).toArray(); 

    alert ("trst"); 
    alert(input_array.join("\n")); 
} 
+0

我不确定您的查询选择器是否正确。我相信'next'只选择下一个兄弟,而'+ *'会选择'.category-description'后的所有元素。 – Shmiddty

+0

@Shmiddty:你正在考虑'〜'选择器。 :)'+'只选择下一个元素同胞。 –

+0

你说得对。我倾向于在'li'的上下文中使用'+'选择器,因此它最终将样式化所有元素,但是第一个'li',但仅仅是因为每个元素都紧接着'li'前面。 – Shmiddty