2013-07-28 89 views
1

這個腳本與消息隨機崩潰「無法得到的未定義或爲空引用屬性。長度」指的是「matched_array_pics.length」。它肯定會崩潰,如果我克隆,將相同的圖像兩次附加到#train div。問題與多維數組和循環

$(document).ready(function() { 

    var starting_pics = ["AN.gif", "CN.gif", "EN.gif", "GN.gif"]; 

    var an_array_pics = ["CN.gif", "EN.gif", "GN.gif", "AN.gif"]; 
    var cn_array_pics = ["EN.gif", "GN.gif", "AN.gif", "CN.gif"]; 
    var en_array_pics = ["GN.gif", "AN.gif", "CN.gif", "EN.gif"]; 
    var gn_array_pics = ["AN.gif", "CN.gif", "EN.gif", "GN.gif"]; 

    var grand_array_pics = [an_array_pics, cn_array_pics, en_array_pics, gn_array_pics]; 

    var i = 0; 

    for (i = 0; i < starting_pics.length; i++) { 
     $("<img/>").attr("src", "images/" + starting_pics[i]).load(function() { 
      $(this).appendTo("#main"); 
      $(this).addClass("pics"); 
     }); 
    } 


    $("#main").on("click", ".pics", function() { 

     var j = $(".pics").index(this); // gets the index for the matched_array_pics... 
      console.log(j); 

     $("#sidebar .pics").remove(); 
     $(this).clone().appendTo("#train"); 
     $(this).clone().appendTo("#sidebar"); 
     $("#main .pics").remove(); 

     var matched_array_pics = grand_array_pics[j]; // ... in grand_array_pics. 

     var k = 0; 

     for (k = 0; k < matched_array_pics.length; k++) { 
      $("<img/>").attr("src", "images/" + matched_array_pics[k]).load(function() { 
       $(this).appendTo("#main"); 
       $(this).addClass("pics"); 
      }); 
     } 
    }); 
});  //end ready 
+0

錯誤發生在哪條線上?請盡最大努力允許測試您的代碼,例如,通過提供[fiddle](http://jsfiddle.net)。 – FakeRainBrigand

回答

0

我認爲這個問題是在這一行:var j = $(".pics").index(this);,我認爲就應該改寫如下:var j = $(this).index();這將會是有益的,如果你可以只在討論的行之後添加console.log(j);,看看有什麼j結束存在。當這條線執行var matched_array_pics = grand_array_pics[j];我認爲你得到undefined,因爲當你的代碼運行時j不是一個數字。

+0

但我相信他的語法也是正確的。 [docs](http://api.jquery.com/index/)表示您可以使用index()搜索匹配元素集合 –

+0

將(this)作爲參數傳遞給.index()不是和獲得(this)的索引一樣。看看這個問題:http://stackoverflow.com/questions/17634846/jquery-index-of-element-of-a-certain-class – frenchie

+0

我知道,使用'$(this).index()'將得到與兄弟姐妹相關的索引,但使用'$('。pics')。index(this)'應該得到與匹配對象集有關的索引,那麼你能解釋一下在這種情況下,這兩個返回值是不同的值,看起來像'$('。pics')'會引用'#main'的所有子節點# –