【问题标题】:How to make a list of image links in jQuery?如何在jQuery中制作图像链接列表?
【发布时间】:2013-06-15 08:39:45
【问题描述】:

我有一个链接列表。我想要做的是使用 jQuery 为每个链接附加一个函数;单击链接时,该函数将运行,并将一对图像加载到一个 div 中(img ids "img1" 和 "img2")。每个链接都有“链接”类,并将加载一对不同的图像。因此,第一个链接将加载 Image 1A 和 Image 1B,第二个链接将加载 Image 2A 和 2B,依此类推。我有两个数组中的图像。

但是,在页面停止加载后,它最终加载了数组的最后两个图像,而不是像我想要的那样附加调用。更重要的是,点击链接没有任何作用!

var loadImages =
{
    init: function()
    {
        var links = $( ".link" );
        myArray1 = [ 
            "imgs/png/image1.png",
            "imgs/png/image2.png",
            "imgs/png/image3.png",
        ];
        myArray2 = [ 
            "imgs/jpg/image1.jpg",
            "imgs/jpg/image2.jpg",
            "imgs/jpg/image3.jpg",
        ];
        for ( var i = 0, ii = links.length; i < ii; i++ )
        {
            $( links[ i ] ).bind( "click", loadImages.imgLoader( myArray1[ i ],
                myArray2[ i ] ) );
        }
    },
    imgLoader: function( firstURI, secondURI )
    {
        document.getElementById( "img1" ).src = firstURI;
        document.getElementById( "img2" ).src = secondURI;
    }
};
loadImages.init();

【问题讨论】:

  • 您在每个数组中的最后一项末尾有一个逗号...这不好。这可能会导致您的问题。

标签: javascript jquery image download hyperlink


【解决方案1】:

你不绑定回调函数。你执行loadImages.imgLoader 并传递结果。

通常你可以只绑定一个回调函数,但由于你在回调本身中使用了一个计数器变量,你需要警惕i的范围:

$(links[i]).on("click", (function(j) {
    return function() {
        loadImages.imgLoader(myArray1[j], myArray2[j]);
    }
})(i));

更好的方法是一次将事件处理程序绑定到所有链接,并在没有for 循环的情况下处理图像交换:

$('.link').click(function() {
    var index = $(this).index();

    $('#img1').prop('src', myArray1[index]);
    $('#img2').prop('src', myArray2[index]);
});

【讨论】:

  • 非常感谢!我想我确实更喜欢第二种方法,但一开始并没有奏效。 (我不得不把第二行改成var index = $( '.link' ).index( this );。)不管怎样,我想我还有很多关于回调的知识。
【解决方案2】:

尝试使用.each() 方法。

var loadImages = {
  init: function(){
    var myArray1 = ['imgs/png/image1.png', 'imgs/png/image2.png', 'imgs/png/image3.png'];
    var myArray2 = ['imgs/jpg/image1.jpg', 'imgs/jpg/image2.jpg','imgs/jpg/image3.jpg'];
    $('.link').each(function(i){
      $(this).click(function(){
        loadImages.imgLoader(myArray1[i], myArray2[i]);
      });
    });
  },
  imgLoader: function(firstURI, secondURI){
    $('#img1').attr('src', firstURI);
    $('#img2').attr('src', secondURI);
  }
};
loadImages.init();

此外,您应该使用关键字var,这样您的变量就没有全局范围,并删除数组末尾的逗号。有关.each() 的更多信息,请访问http://api.jquery.com/each/。

【讨论】:

  • 哦,我不熟悉.each()。我会检查一下。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2021-11-05
相关资源
最近更新 更多