2012-11-02 60 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