2010-01-30 66 views
2

相当新的jQuery和有一点与函数我写的,非常类似于this问题的问题,如果是那样的东西去那么显然我有一个封闭的问题。 正如彼得·贝利把它上面的线,这是发生了什么事:jQuery的迭代一个功能

  1. 遍历一些值
  2. 定义/在使用该迭代分配的功能迭代变量
  3. 你了解到每一个功能的使用只有来自上次迭代的值。
  4. WTF?

这是我的代码:

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 
     }); 
    }); 
} 

我知道$链接定义是相当混乱,但该位的作品。

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

并不真正懂得如何从其他线程解决它,所以如果有人能帮忙,将是伟大的!

回答

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')

+0

你确定?难道你没有问题,直到hoverIntent回调得到运行,内部函数才真正创建? – Bruce 2010-01-30 05:30:21

+0

我敢肯定:) – 2010-01-30 05:35:45

+0

不过,我仍然有'页(一)''而不是这样this'感谢使我重读我的功能:) – 2010-01-30 05:37:07