我正在尝试为我页面上的所有锚链接禁用 onbeforeunload,因此它仅在我关闭浏览器窗口/选项卡时触发。
这是我这样做的方式:
对于所有锚点,onmouseover,我将空值存储到 window.onbeforeunload 函数。然后,onmouseleave,我恢复了 window.onbeforeunload 函数
$(function () {
SetupOnNavigateAway();
});
function OnBeforeUnload(oEvent) {
return "Are you sure you want to close this page?";
}
function SetupOnNavigateAway() {
window.onbeforeunload = OnBeforeUnload;
$(window).data('beforeunload', window.onbeforeunload);
$('body').delegate('a', 'hover', function (event) {
if (event.type === 'mouseenter' || event.type === "mouseover")
window.onbeforeunload = null;
else
window.onbeforeunload = $(window).data('beforeunload');
});
}
我的问题是,对于某些浏览器版本,当我单击链接时,mouseleave 事件在 mouseclick 事件之前触发。(我的光标没有离开链接)所以 onbeforeunload 函数在不需要调用时被调用..
例子:
现在是这样处理的:
- 在按钮上移动鼠标:window.onbeforeunload = null
- 将鼠标从按钮上移开:window.onbeforeunload = OnBeforeUnload
- 在按钮上移动鼠标:window.onbeforeunload = null
- 将光标停留在按钮上并单击:window.onbeforeunload = OnBeforeUnload,重定向
这是它应该如何工作的:
- 在按钮上移动鼠标:window.onbeforeunload = null
- 将鼠标从按钮上移开:window.onbeforeunload = OnBeforeUnload
- 在按钮上移动鼠标:window.onbeforeunload = null
- 将光标停留在按钮上并单击:重定向(window.onbeforeunload 仍然为空)
那么,当我单击锚点时,如何防止 mouseleave 事件发生?
谢谢!