如何阻止windows.onbeforeunload被IE中的javascript:href链接触发?

Max*_*axx 26 javascript jquery internet-explorer onbeforeunload onunload

我正在为我的表单构建一个故障保护,它会警告用户,如果他们离开页面,他们的表单数据将会丢失(类似于gmail所做的).

window.onbeforeunload = function () {    
        if (formIsDirty) {
            return "You have unsaved data on this form. Don't leave!";
        }
}
Run Code Online (Sandbox Code Playgroud)

上面的函数在firefox中很有用,但在IE中它由任何href链接触发,即使是链接到javascript而不是其他页面的链接.

例如....

<a href='javascript:someFunction();'>click</a>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法绕过这个,因为我不希望用户认为他们只是点击它上面的按钮就离开了页面.我没有选择重写所有各种链接,因为它们是内置的和众多的.

有任何想法吗?

Dr.*_*lle 36

您可以在悬停这些链接时删除并重新分配onbeforeunload:

jQuery(
  function($)
  {
      //store onbeforeunload for later use
    $(window).data('beforeunload',window.onbeforeunload);  

      //remove||re-assign onbeforeunload on hover 
    $('a[href^="javascript:"]')
      .hover( 
             function(){window.onbeforeunload=null;},
             function(){window.onbeforeunload=$(window).data('beforeunload');}
            );

  }
);
Run Code Online (Sandbox Code Playgroud)


Gin*_*hen 7

我刚遇到类似的问题,发现了一个非常简单的解决方案:

$("a").mousedown(function() {
    $(window).unbind();
});
Run Code Online (Sandbox Code Playgroud)

这将在触发click事件之前删除onbeforeunload事件.