2011-09-29 261 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); 
    } 
});