【问题标题】:Problems with multidimensional array and loops多维数组和循环的问题
【发布时间】:2013-07-28 21:58:08
【问题描述】:

此脚本随机崩溃,消息“无法获取未定义或空引用的属性 .length”,指的是“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

【问题讨论】:

  • 错误出现在哪一行?请尽最大努力允许测试您的代码,例如,提供fiddle

标签: javascript jquery arrays loops


【解决方案1】:

我认为问题出在这一行:var j = $(".pics").index(this);,我认为它应该被重写为:var j = $(this).index(); 如果您可以在有问题的行之后添加console.log(j); 以查看@ 987654326@ 最终成为。当此行执行 var matched_array_pics = grand_array_pics[j]; 时,我认为您会得到 undefined,因为当您的代码运行时,j 不是数字。

【讨论】:

  • 但我相信他的语法也是正确的。 docs 表示您可以使用 index() 搜索匹配的元素集
  • 将 (this) 作为参数传递给 .index() 与获取 (this) 的索引不同。看看这个问题:stackoverflow.com/questions/17634846/…
  • 我知道,使用 $(this).index() 将获得与兄弟姐妹相关的索引,但使用 $('.pics').index(this) 应该获得与匹配对象集相关的索引,所以你能解释一下在这种情况下如何两者返回不同的值,似乎$('.pics') 将引用#main 的所有孩子
  • j 返回一个数字 0 和 3。将代码更改为您建议的有效。
  • 好吧它不再崩溃了,但是代码中的逻辑不正确。点击图片AN应该加载an_array_pics到#main div,点击图片GN应该加载gn_array_pics等等。
猜你喜欢
  • 2012-11-21
  • 2015-10-02
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多