2013-07-28 90 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'的所有子节点# –