jquery很新,我写的函数有点问题,非常类似于this问题,如果有什么事情要继续,那么显然我有一个闭包问题。 正如Peter Bailey在上面提到的那样,这就是正在发生的事情:
这是我的代码:
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中的图片替换为一个取决于悬停的链接,但在结尾处,每个链接都将图片更改为“联系人”(最后一个)。
没有真正理解如何从其他线程中解决它,所以如果有人可以提供帮助那就太棒了!
答案 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')