2010-08-10 187 views
3

我有一些代碼,將頁面上的所有'a'標籤添加鼠標事件和鼠標事件。我喜歡它,以便鼠標輸出啓動5秒計時器,然後調用一個函數。但是,如果新的mouseover事件觸發,它應該取消任何現有的定時器。我使用的代碼如下。 setTimeout()工作正常,但它似乎像clearTimeout()沒有引用正確的timeoutID,即使我全局聲明它。有什麼建議麼?clearTimeout鼠標懸停事件不清除setoutout鼠標事件

var timeoutID; 

function addMouseoverEvent() { 
    $('a').each(function(index) { 
     $(this).mouseover(function() { 
      clearTimeout(timeoutID); 
      // do stuff 
     }) 
    }); 
} 

function addMouseoutEvent() { 
    $('a').each(function(index) { 
     $(this).mouseout(function() { 
      timeoutID = setTimeout(function() { 
       // do stuff 
      }, 5000); 
     }) 
    }); 
} 

$(window).load(function() { 
    addMouseoverEvent(); 
    addMouseoutEvent(); 
}); 

我應該澄清,應該只有一個活動計時器。這就是爲什麼我希望它是全球性的。如果發生鼠標懸停事件,則不應保留定時器。如果發生鼠標事件,則只有一個計時器應該處於活動狀態 - 由最後一次鼠標事件觸發的計時器。

+0

是否有你的錨內的圖像或?任何其他元素? – 2010-08-10 01:26:53

+0

是的,可能有圖像。未知元素將是什麼(這實際上是一個C hrome插件可以在每個訪問過的頁面上運行,所以頁面的內容可以是任何東西)。 – ggutenberg 2010-08-10 01:40:18

回答

2

如果您的timeoutId是globall,那麼它將在$('a').each()的每次迭代中被覆蓋。如果你使用1.4,你可以使用最可能的delay方法。或者你可以使用$(this).data('timeoutId',setTimeout(youFunction)')在元素上存儲timeoutId。

+0

雖然他沒有在'.each()'中分配它,但它發生在處理程序中......實際上'.each()'是多餘的,他可以完全刪除該閉包。 – 2010-08-10 01:29:06

+0

但是它仍然迭代ig,在重新創建的集合中有多個'a'元素...使用'each'是多餘的。 – prodigitalson 2010-08-10 01:41:45

+0

我已根據您的建議移除.each()。更好的代碼,但clearTimeout()仍然不起作用。如果我將timeoutID存儲在每個元素上,那麼在調用clearTimeout()以確保我全部獲得它們時,是否需要迭代每個元素的timeoutID? – ggutenberg 2010-08-10 01:57:08

4

我知道它已經被回答了,但我發現只需要移除.each()調用就會出現。根據需要努力嘗試在this Fiddle小懸停遊戲

(function game() { 
    var timeoutID; 
    $('a').mouseover(function() { 
     $('#box').html('All is well.').removeClass('bang'); 
     clearTimeout(timeoutID); 
     // do stuff 
    }); 
    $('a').mouseout(function() { 
     $('#box').html('You have 2 seconds to return!'); 
     timeoutID = setTimeout(function() { 
      $('#box').addClass('bang').html('Too Late!'); 
      // do stuff 
     }, 2000); 
    }); 
}()); 

這是非常有可能的,我失去了一些東西 - 但懸停遊戲似乎做工精細

+0

在jsFiddle上測試過,你是對的,它在那裏工作。我有90%的積極性,但是昨天晚上在我的實施過程中沒有工作,但是很晚,我很累。 +1只是爲了花時間來測試它,因爲它看起來像它的作品(至少在小提琴沙箱中)。 – ggutenberg 2010-08-10 10:13:09