2011-09-29 263 views
2

我一直在努力弄清楚如何整合一个简单的循环工作与jQuery循环插件。在我的基本示例中,我尝试使用jquery .hover().cycle()创建15个循环函数。jQuery循环插件循环

for(i=1;i<15;i++){ 
    $(".t"+ i).hover(function() { 
     $('.projectTitle').cycle(i); 
    }); 
} 

如果我创建15个独立的函数(每个下面)脚本运行良好,但我需要简化我的代码。

$('.t1').hover(function() { 
    $('.projectTitle').cycle(1); 
}); 
$('.t2').hover(function() { 
    $('.projectTitle').cycle(2); 
}); 
$('.t3').hover(function() { 
    $('.projectTitle').cycle(3); 
}); 
$('.t4').hover(function() { 
    $('.projectTitle').cycle(4); 
}); 
... 

任何帮助将不胜感激。

+0

所以这是行不通的像你有它在你的第一个例子吗?任何错误? – Jack

+0

@Jack问题是循环结束后,'i'等于15,这将是每个匿名函数使用的值。 – Dennis

+0

@丹尼斯是的,谢谢你的澄清。 – Jack

回答

2

您可以通过存储i作为DOM元素本身的数据属性规避全封闭的问题:(顺便说一句,你应该使用标识取代所有这些类,出于性能)

for (var i=1; i<=15; i++) { 
    $('.t'+i).data("inc",i).hover(function() { 
     $('.projectTitle').cycle($(this).data("inc")); 
    }); 
} 

“正确”的方式做,这是一个JavaScript关闭,这我在没有专家,但我想应该是这样的:

for (var i=1; i<=15; i++) { 
    $('.t'+i).hover(
     (function() { 
      var a = i; 
      return function() { $('.projectTitle').cycle(a); } 
     })() 
    ); 
} 
+0

天才答案!!! ID的运行速度有明显差异吗?我一直更喜欢使用类,以防我可能想要在多个元素上重用类。在这种情况下,我可能有两个使用.t1的元素,但很可能只有一个使用.projectTitle的元素,在这种情况下,我应该将其设置为ID。 – negrelja

+0

这很明显取决于你多久做一次。对于十五个元素,您不会注意到很多差异,但尽可能使用ID是一种良好的做法。 – Blazemonger

0

如果他们是在DOM你正确的顺序可以使用jQuery的提供的索引中的每个并给他们所有的同一类:

$('.t').each(function(index) { 
    $(this).mouseover(function() { // Use mouseover instead of hover, otherwise your function will be run on mouseover AND mouseout 
     $('.projectTitle').cycle(index); 
    } 
});