2012-09-03 105 views
2

我的代碼,這個小源JavaScript的for循環隨機回報

for (i = 0; i < elements.length; i++) { 
    console.log(i); 
    (function (i) { 
     if (elements[i]["id"] == id) { 
      index = i; 
      console.log(i); 
     } 
    })(i); 
} 

console.log(index); 

我想找到一個數組元素的索引,其中子元素「ID」 = ID;但它有時會返回0 simetimes 1.此代碼位於類內的函數中。我調用了兩次相同的函數,但在類之外使用了不同的參數,所以首先它必須顯示0和1,但有時顯示1和0。所以你能幫助我嗎?我也嘗試過這種方法,但它不起作用。

var i = 0; 
while (i < elements.length) { 
    console.log(elements[i]["id"]); 
    if (elements[i]["id"] == id) { 
     index = i; 
     break; 
    } else if (elements[i]["id"] != id) { 
     i++; 
    } 
} 

console.log(index); 

Here is my test page,如果你使用Chrome打開它(有時候它發生,但在Firefox它發生主要是)你會看到,有時小的形象出現,但有時,當你按下按鈕在前看不見。您還可以看到控制檯輸出「檢查元素 - >控制檯」

編輯

我改變了我的代碼,這樣更好的調試(如蘭多的建議):

for (i in elements){ 
    console.log("comparing elements['"+ i +"']['id']: "+ elements[i]["id"] +" with id:' "+ id + "'"); 
     if(elements[i]["id"] == id){ 
      index = i; 
     } 
    } 

console.log(index); 

,並得到控制檯輸出中:

comparing elements['0']['id']: id2 with id:' id1' Slideshow.js:140 
comparing elements['1']['id']: id1 with id:' id1' Slideshow.js:140 
1 Slideshow.js:147 
comparing elements['0']['id']: id2 with id:' id2' Slideshow.js:140 
comparing elements['1']['id']: id1 with id:' id2' Slideshow.js:140 
0 

當它應該是:

comparing elements['0']['id']: id1 with id:' id1' Slideshow.js:140 
comparing elements['1']['id']: id2 with id:' id1' Slideshow.js:140 
0 Slideshow.js:147 
comparing elements['0']['id']: id1 with id:' id2' Slideshow.js:140 
comparing elements['1']['id']: id2 with id:' id2' Slideshow.js:140 
1 

EDIT 2

看到它原來,在數組對象「要素」的改變的地方,elements[0]["id"] becames輸出後"id2"它應該是"id1"我仍然不能difinetly說爲什麼會這樣或如何解決它。所以請如果你有任何想法分享它。

Here is my JSfiddle link

+0

else if(elements [i] [「id」]!= id)??你可以用其他替換 – CloudyMarble

+0

我試過了,同樣的問題。 – Irakli

+0

這不是一個答案,而是一個評論:) – CloudyMarble

回答

1

我發現問題所在。看起來,有時小圖像被載入第一個如此大的圖像出現在頂部。這完全是關於圖像加載。無論如何謝謝你的答案,每個人都幫助我調試問題。

1

我想你必須改變你的代碼,既沒有內部函數(閉)(第一的console.log將幫助您調試代碼(或者你可以只使用螢火蟲和設置斷點該行)

for (i in elements){ 
    console.log("comparing elements['"+ i +"']['id']: "+ elements[i]["id"] +" with id:'"+ id + "'"); 
    if(elements[i]["id"] == id){ 
     index = i; 
     console.log(i); 
    } 
} 

console.log(index); 

記住,JavaScript數組不一定是從零開始的,甚至不一定是連續的,因此,「在」將幫助您避免可能的錯誤。我刪除關閉,因爲我沒有看到你實際上在這種情況下需要它。

+0

我做了你寫的,並修改了我的第一篇文章。 – Irakli

+0

就像你從日誌中看到的那樣,問題實際上並不是for循環,而是數組:在兩次運行中,數組都是這樣的['id2','id1'],所以在第一次運行時,當您搜索'id1 '它會返回'1',而在第二次運行時,當您搜索'id2'時它將返回'0'。 –