1

我一直在努力让它工作,但似乎没有任何帮助。

所以我在图片数组中有两个图像。我想要做的是,当您单击上一张图片时,会出现下一张。我很确定问题出在这个问题上,indexOf因为它每次都返回-1。

如果我替换行:

pictures[listIndex+1].show("drop", {direction: "up"}, 1000);<---不起作用。

带线:

pictures[1].show("drop", {direction: "up"}, 1000);<---它有效,但不是很有用。

我希望你明白我的问题是什么,并为我糟糕的英语感到抱歉。我真的很感谢你的帮助。

$(document).ready(function(){
    var pictures = [$("#link"), $("#italy1")];
    pictures[1].hide();
    $("#link").click(function(){
        var listIndex = pictures.indexOf($(this));
        pictures[listIndex+1].show("drop", {direction: "up"}, 1000);
    });
    $("#italy1").click(function(){
        $(this).hide("drop", {direction: "up"}, 1000);
});
});
4

4 回答 4

2

那是因为您将元素包装在 jQuery 对象中。即使两个 jQuery 对象包含相同的元素,它们仍然是两个独立的对象,因此该indexOf方法无法通过寻找另一个来找到一个。

将元素本身放入数组中:

var pictures = [$("#link").get(0), $("#italy1").get(0)];

现在您可以使用元素引用来查找数组中的元素。使用该$.inArray方法,因为它也适用于没有该Array.indexOf方法的浏览器:

var listIndex = $.inArray(this, pictures);

当然,当你从数组中获取元素时,你需要将它包装在一个 jQuery 对象中,以便在其上使用 jQuery 方法:

$(pictures[listIndex+1]).show("drop", {direction: "up"}, 1000);
于 2013-04-20T16:54:29.010 回答
0

也许jQuery.inArray可以解决问题。

于 2013-04-20T16:48:39.950 回答
0

如果要选择下一个$("#link"),可以随时使用$(this).next("#link")

于 2013-04-20T16:51:50.523 回答
0

为了支持 Guffa,像这样的FIDDLE

$(document).ready(function(){
    var pictures = [$("#link").get(0), $("#italy1").get(0)];

    $(pictures[1]).hide();

    $("#link").on('click', function(){
        var listIndex = $.inArray(this, pictures);
        $(pictures[listIndex+1]).show("drop", {direction: "up"}, 1000);
    });

    $("#italy1").on('click', function(){
        $(this).hide("drop", {direction: "up"}, 1000);
    });
});
于 2013-04-20T17:12:07.637 回答