尝试在叠加层上使用委托来使事件冒泡。
编辑
小提琴今天很慢,我最初发布的小提琴没有我使用的代码片段。
这确实适用于 jQuery 版本(1.8.2)选择的 jsBIN fork 链接: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>";
});