检查是否从事件处理函数触发了另一个事件

时间:2012-03-02 00:30:18

标签: javascript events javascript-events event-handling

让我的图像我有一个附加到图像的事件处理函数,例如,onmouseover处理程序。如果特定元素触发onmouseover事件,我不希望运行此处理程序。

更具体地说,我有一个悬停的图像,弹出一个菜单。如果鼠标移出该图像,我想关闭该菜单,除非我将鼠标移动到与图像相邻的菜单。

伪代码

中有这样的东西
img.mouseout = function () {
if (otherelement.onmouseover.fired) {
 leave the menu as it is
} 
else 
{
close the menu
}

那么如何判断是否有其他事件被解雇?

1 个答案:

答案 0 :(得分:0)

我会添加一个超时和一个鼠标悬停处理程序,在另一个处理程序中清除它。虽然元素可以在视觉上完全相邻,但添加一个小型计时器更安全,因为鼠标输出事件可能会触发一个微小的1px区域,从而导致丑陋的闪烁。

这也允许快速mouses而不闪烁。

类似的东西:

var timer;

img.onmouseout = other.onmouseout = function() {
  timer = setTimeout(closemenu, 100);
}

img.onmouseover = other.onmouseover = function() {
  clearTimeout(timer);
}

function closemenu() {
  // close it
}