IE8下,a标签触发onbeforeunload事件

背景

  今天开发过程中,遇到个奇怪现象。我们系统针对onbeforeunload事件做了处理,当该事件触发时弹框提示,由用户确认退出。当点击a标签时,IE8下触发了该事件。IE11与Chrome都没有问题。好吧,又是IE的坑。

分析

  网上搜索一番,原来点击a标签会以此触发如下事件

onclick->window.onbeforeunload->href

所以解决这个问题,在onclick的回调函数末尾,加 return false; ,阻止事件传递到onbeforeunload。

另外还有网友说,href=“###” 也可以解决该问题

补充

根据 MSDN 中描述,IE 的 onbeforeunload 事件可由以下这些条件触发:

  • 关闭当前浏览器窗口。
  • 导航到另一个进入一个新的地址或选择一个喜欢的位置。
  • 单击后退,前进,刷新,或主页按钮。
  • 点击一个链接到新页面。
  • 调用 超链接的 click 方法。
  • 调用 document.write 方法。
  • 调用 document.open 方法。
  • 调用 document.close 方法。
  • 调用 window.close 方法。
  • 调用 window.open 方法,窗口名称设置值为 _self。
  • 调用 window.navigate 或 NavigateAndFind 方法。
  • 调用 location.replace 方法。
  • 调用 location.reload 方法。
  • 指定一个 location.href 属性的新值。
  • 使用 submit 按键提交表单,或调用 form.submit 方法。