Javascript:事件侦听器 mouseout

Javascript: Event Listener mouseout

提问人:phpNutt 提问时间:11/17/2009 最后编辑:Rob WphpNutt 更新时间:12/28/2011 访问量:1141

问:

让我解释一下我的问题。我有一个 mouseout 事件分配给 id 为 calendar 的 div 标签。现在,当调用此处理程序时(当鼠标不在日历 div 上时),我想等待 2 秒钟,然后查看鼠标是否仍未在日历 div 上。如果鼠标我仍然在外面,那么做一个功能,如果没有,那就什么都不做。

我使用原型 javascript 库。 我的代码如下:

$('calendar').observe('mouseout', function (event){ 
    setTimeout(/* call this event again */, 2000);
}

谢谢

事件处理 prototypejs unobtrusive-javascript mouseout

评论


答:

2赞 David Hedlund 11/17/2009 #1
$('calendar').observe('mouseout', function(e) {
   myTimeout = setTimeout(function() { /* stuff to do after 2 secs */, 2000);
});

$('calendar').observe('mouseover', function(e) {
   if(myTimeout) window.clearTimeout(myTimeout);
});

评论

0赞 phpNutt 11/17/2009
2 秒后你有 /* 事情要做 */ 这是我想看看鼠标是否仍然在日历 div 上的地方。这是我不确定的
0赞 David Hedlund 11/17/2009
是的,好吧,如果你查看下面的“mouseover”中的内容,当元素再次悬停时,它实际上会取消计时器,所以这意味着,如果该代码执行,你知道根据定义它没有在 2 秒内被鼠标悬停,所以你想做的,在那里是安全的
0赞 Shawn Steward 11/20/2009
只要确保在这两个函数的作用域之外声明 myTimeout 变量,这应该有效。
0赞 David Hedlund 11/20/2009
实际上,这不是必需的。如果你引入一个没有“var”关键字的变量,它就会成为一个全局变量,无论你在哪个范围内引入它(继续尝试)。在此之前,鼠标悬停不会导致错误,因为我们正在检查它是否存在,并且在发生这种情况之后,在第一次鼠标退出时,它也不会成为问题,因为它将成为全局的