每个都有效但绑定不是为什么?

时间:2011-12-22 10:57:24

标签: jquery

你有一个控制阵列的功能,它工作正常。

这是我的功能:

var arrayLength = outFitLinks.length-1;
    var depthCount = 0;
    for(i=1;i<=arrayLength;i++){
        $('.cloneFrame').clone().removeClass('cloneFrame').each(function(){
            i % 2 == 1 ? $(this).attr('id','id'+i).appendTo('.front') : $(this).attr('id','id'+i).appendTo('.back');
            $(this).find('.product-frame').each(function(index){
                depthCount += 1;
                $(this).find('img').attr('src', 'imgs/outfits/'+depthCount+'.jpg');
                $(this).find('a').each(function(){
                    console.log(outFitLinks[i][index]); 
                })
                $(this).parent().hide();
            })
        })

    }
    $('.cloneFrame').remove();

在相同的功能我改为控制台绑定到点击事件,它不工作..有什么不对吗?

这是功能不起作用:

var arrayLength = outFitLinks.length-1;
    var depthCount = 0;
    for(i=1;i<=arrayLength;i++){
        $('.cloneFrame').clone().removeClass('cloneFrame').each(function(){
            i % 2 == 1 ? $(this).attr('id','id'+i).appendTo('.front') : $(this).attr('id','id'+i).appendTo('.back');
            $(this).find('.product-frame').each(function(index){
                depthCount += 1;
                $(this).find('img').attr('src', 'imgs/outfits/'+depthCount+'.jpg');
                $(this).find('a').bind('click', function(){
                    console.log(outFitLinks[i][index]); // not working  
                })
                $(this).parent().hide();
            })
        })

    }
    $('.cloneFrame').remove();

2 个答案:

答案 0 :(得分:3)

它不起作用,因为事件处理程序稍后运行,此时变量i(可能outFitLinks)与绑定事件时的值不同。

创建一个闭包,以便您可以在以后的局部变量中保留每个值:

(function() {
  var links = outFitLinks[i][index];
  $(this).find('a').bind('click', function(){
    console.log(links);
  });
})();

考虑到这一点,在这种情况下你已经有了一个闭包,因为你正在使用.each作为循环,所以它应该足够了:

var links = outFitLinks[i][index];
$(this).find('a').bind('click', function(){
  console.log(links);
});

答案 1 :(得分:-1)

您是否尝试过使用.click(...)代替bind("click", ...)? 我有一些奇怪的事情发生在一个而不是另一个,我想是尝试改变它我想:)