javascript - 当悬停的元素被另一个元素覆盖时,不会触发 mouseout

标签 javascript javascript-events

我最近发现 javascript 中的 mouseout 事件有一个奇怪的行为。 请看我的 fiddle :http://jsfiddle.net/Uf3xQ/25/

当我将鼠标悬停在按钮上时,将触发 mouseenter 事件。当我离开按钮时,将触发 mouseout 事件。到目前为止一切顺利。

现在,当我将鼠标悬停,然后单击并且单击事件显示一个放置在按钮上方的 div 时,mouseout 事件也将被触发。

但是当使用 setTimeout 短暂延迟后显示 div 时,mouseout 事件不会被触发,直到我移动鼠标。

你能给我解释一下这种行为吗?

更新: 我将错误提交给 Chromium,他们确认了这一点。看这里:http://code.google.com/p/chromium/issues/detail?id=159389

Opera、Safari(常见的WebKit)和IE也有这个bug

最佳答案

尝试在叠加层上使用委托(delegate)来使事件冒泡。
编辑 今天 fiddle 很慢,我最初发布的 fiddle 没有我使用的代码片段。

这确实适用于选择 jQuery 版本 (1.8.2) 链接到 jsBIN 分支:http://jsbin.com/ugeniq/3/edit

编辑 2 我刚刚意识到没有 div 的鼠标/悬停/悬停不起作用。我已经更新了代码,所以现在它可以使用和不使用 div 覆盖。

var fail = true;

var button = document.getElementById("button");
var overlay = document.getElementById("overlay");
var log = document.getElementById("log");


button.addEventListener('click', function() {
    if (fail) {

        // mouseout won't be fired until you move the mouse
        window.setTimeout(function() {
            overlay.style.display = 'block';
        }, 0);

    } else {

        // mouseout event is fired instantly
        overlay.style.display = 'block';

    }


    log.innerHTML += 'over' + "<br>";

}, false);

button.addEventListener('mouseover', function() {
    log.innerHTML += 'over' + "<br>";
}, false);

button.addEventListener('mouseout', function() {
    log.innerHTML += 'out' + "<br>";
}, false);

$(overlay).delegate(button, 'mouseover', function() {
        log.innerHTML += 'over' + "<br>";
});

$(overlay).delegate(button, 'mouseout', function() {
        log.innerHTML += 'out' + "<br>";
    });

关于javascript - 当悬停的元素被另一个元素覆盖时,不会触发 mouseout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228656/

相关文章:

javascript - JavaScript 事件处理程序中的 "javascript:"是什么?

javascript-events - SproutCore以编程方式触发MenuPane中的项目选择

javascript - 为什么我不能使用 addEventListener 来停止上下文菜单事件?

javascript - 为什么说uncaught Reference error : counter is not defined?

javascript - 如何读取 redux 容器组件中的 url 参数

javascript - 选择文件而不使用 javascript 浏览

javascript - 我应该将多个 DOMContentLoaded 处理程序集成到一个中吗?

javascript-events - 如何在keydown中停止按键事件

javascript - Dynamics CRM 2011 - 更改相关实体列表的 View

javascript - 来自 JQuery 的奇怪消息 - 假设没有找到它