2017-06-01 31 views
0

當您想要在其上運行循環時,JQuery .hover()方法會遇到問題。說我有代碼如下無法循環JQuery .hover()

<div class="screen screen_1"></div> 
<div class="screen screen_2"></div> 
<div class="screen screen_3"></div> 
for(j=0; j<$('.screen').length+1; j++){ 
    $('.screen_'+ j +'').hover(
     function mousein(){ 
     //do something when mouse enters 

     }, function mouseout(){ 
     //do something else when mouse leaves 
     } 
); 
} 

現在jhint告訴我不要做一個循環內的函數,所以我有以下,但它仍然不喜歡它。

var mousein = function(){ 
    //do something when mouse enters 
}; 

var mouseout = function(){ 
    //do something else when mouse leaves 
}; 

for(j=0; j<$('.screen').length+1; j++){ 
    $('.screen_'+ j +'').hover(
    mousein, mouseout; 
); 
} 

在此先感謝

+0

抱歉,傢伙......沒有直截了當。再次感謝您的幫助。 –

回答

2

無需環路...

$('.screen').hover(
    function(){ 
     //do something when mouse enters 
     // $(this) gets you the element being affected. 
     }, function(){ 
     //do something else when mouse leaves 
     } 
); 
1

取出;內部函數的參數

$('.screen_'+ j +'').hover(mousein, mouseout/*;*/); 
              //^^ not valid 
0

消除了對外部功能的需求.. 。

$('.screen').mouseenter(function() { 
    //do something when mouse enters 
}).mouseleave(function() { 
    //do something else when mouse leaves 
}); 
0

沒有必要遍歷它來分配處理程序。只需使用:

$(".screen").on("mouseenter mouseleave",function(event){ 
    switch(event.type){ 
     case "mouseenter": 
      // code for mouse in 
      break; 
     case "mouseleave": 
      // code for mouse out 
      break; 
} 

使用$(this)使用觸發事件的元素。例如,如果.screen_1觸發事件$(這)將基本上等於使用$(」。SCREEN_1" )

+0

當存在'.mouseleave()'事件時,不需要區分'.hover()'和'.mouseenter()'。 – DevlshOne

+1

我在寫這篇文章的時候並沒有想到:P謝謝,我會編輯它 –

+0

'hover()'在內部切換所有內容......不需要在'switch'中定義單個事件...只是無緣無故地增加了代碼膨脹 – charlietfl

0

與循環的問題是,你基本上是試圖環路第一ñ幀。如果你想讓某些東西在你將鼠標懸停在某個東西上時循環,那麼循環需要位於函數內部,而不是循環內部的函數。所以你的代碼應該看起來更像這樣:

$('.screen_'+ j +'').hover(
    function mousein(){ 
    //do loop 

    }, function mouseout(){ 
    //do loop 
    } 
);