clearTimeout鼠标悬停事件不清除setoutout鼠标事件

问题描述:

我有一些代码,将页面上的所有'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

如果您的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

我知道它已经被回答了,但我发现只需要移除.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