【问题标题】:Check if another event is fired from an event handler function检查是否从事件处理函数触发了另一个事件
【发布时间】:2012-03-02 00:30:18
【问题描述】:

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

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

所以在伪代码中是这样的

img.mouseout = function () {
if (otherelement.onmouseover.fired) {
 leave the menu as it is
} 
else 
{
close the menu
}

那么我如何检查是否触发了另一个事件?

【问题讨论】:

  • 您必须自己跟踪它,这会因为您对事件处理程序调用顺序的微弱控制而变得复杂。

标签: javascript events javascript-events event-handling


【解决方案1】:

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

这也允许快速鼠标摇晃而不会闪烁。

类似:

var timer;

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

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

function closemenu() {
  // close it
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多