【发布时间】:2011-03-27 14:19:56
【问题描述】:
我有一些代码可以将鼠标悬停事件和鼠标悬停事件添加到页面上的所有“a”标签。我希望鼠标悬停启动一个 5 秒的计时器,之后它会调用一个函数。但是,如果触发了新的 mouseover 事件,它应该取消任何现有的计时器。我正在使用的代码如下。 setTimeout() 工作正常,但似乎 clearTimeout() 没有引用正确的 timeoutID,即使我在全局范围内声明了它。有什么建议吗?
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();
});
我应该澄清一下,实际上应该只有一个活动计时器。这就是为什么我希望它是全球性的。如果发生鼠标悬停事件,则不应保留任何计时器。如果发生 mouseout 事件,则只有一个计时器应该处于活动状态 - 由最后一个 mouseout 事件触发的计时器。
【问题讨论】:
-
你的锚里面有图片吗?还是其他元素?
-
是的,可能有图像。不知道元素是什么(这实际上是一个 Chrome 插件,它将在访问的每个页面上运行,因此页面的内容可以是任何内容)。
标签: javascript jquery events timeout