jQuery迭代函数

时间:2010-01-30 05:05:57

标签: jquery function closures loops

jquery很新,我写的函数有点问题,非常类似于this问题,如果有什么事情要继续,那么显然我有一个闭包问题。 正如Peter Bailey在上面提到的那样,这就是正在发生的事情:

  1. 迭代某些值
  2. 在使用迭代变量的迭代中定义/分配函数
  3. 您了解到每个函数仅使用上一次迭代中的值。
  4. WTF?
  5. 这是我的代码:

    var pages=['home', 'about', 'events', 'info', 'qa', 'photos', 'contact'];
    
    for (i in pages) {
    
        $link='"'+"[href$='gaction.php?page="+(pages[i])+"']"+'"';
        $source="/images/"+(pages[i])+".png";
    
        $($link).hoverIntent(function() {
            $('#logo_text').stop(true, true).fadeOut(
            0,
            function() {
                $('#logo_text').attr('src', $source).fadeIn('slow'); // swaps logo
            });
        }, function() {
            $('#logo_text').stop(true, true).pause(300).fadeOut(
            0,
            function () {
                $('#logo_text').attr('src', '/images/name.png').fadeIn('slow'); //swaps back
            });
        });
    }
    

    我知道$ link定义非常混乱,但这一点有效。

    该函数的意思是将#logo_text中的图片替换为一个取决于悬停的链接,但在结尾处,每个链接都将图片更改为“联系人”(最后一个)。

    没有真正理解如何从其他线程中解决它,所以如果有人可以提供帮助那就太棒了!

1 个答案:

答案 0 :(得分:2)

您可以使用jQuery.each语句,并通过其结构创建一个闭包。然后,请务必使用var声明变量,您将全部设置:

var pages=['home', 'about', 'events', 'info', 'qa', 'photos', 'contact'];

$.each( pages, function(){
  var $link='"'+"[href$='gaction.php?page="+ this +"']"+'"';
  var $source="/images/"+ this +".png";

  ... rest of function untouched

});

有几种方法可以重写这个功能,但说实话,如果你的功能适合你(选择器)那么你就是好的。只是,而不是使用fadeOut(0, function ...),只需使用hide().attr('src', $source ).fadeIn('slow')