Javascript 检查是否从事件处理程序函数触发了另一个事件
让我们想象一下,我有一个事件处理程序函数附加到一个图像,例如,onmouseover处理程序。如果特定元素触发onmouseover事件,我不希望运行此处理程序 更具体地说,我有一个悬停的图像,一个菜单弹出。如果鼠标移出该图像,我想关闭该菜单,除非我将鼠标移到与该图像相邻的菜单 在伪代码中是这样的Javascript 检查是否从事件处理程序函数触发了另一个事件,javascript,events,javascript-events,event-handling,Javascript,Events,Javascript Events,Event Handling,让我们想象一下,我有一个事件处理程序函数附加到一个图像,例如,onmouseover处理程序。如果特定元素触发onmouseover事件,我不希望运行此处理程序 更具体地说,我有一个悬停的图像,一个菜单弹出。如果鼠标移出该图像,我想关闭该菜单,除非我将鼠标移到与该图像相邻的菜单 在伪代码中是这样的 img.mouseout = function () { if (otherelement.onmouseover.fired) { leave the menu as it is } else
img.mouseout = function () {
if (otherelement.onmouseover.fired) {
leave the menu as it is
}
else
{
close the menu
}
那么,如何检查是否触发了另一个事件呢?我将添加一个超时和一个鼠标悬停处理程序,在另一个处理程序中清除它。虽然这些元素在视觉上可能正好相邻,但添加一个小计时器更安全,因为mouseout事件可能只在一个很小的1px区域触发,从而导致可怕的闪烁 这也允许快速鼠标擦洗而不闪烁 比如:
var timer;
img.onmouseout = other.onmouseout = function() {
timer = setTimeout(closemenu, 100);
}
img.onmouseover = other.onmouseover = function() {
clearTimeout(timer);
}
function closemenu() {
// close it
}
您必须自己跟踪它,这将因为您对事件处理程序调用顺序的控制很弱而变得复杂。