如何访问触发beforeunload的JavaScript href事件

时间:2012-08-22 01:53:28

标签: javascript javascript-events mailto onbeforeunload

我想访问导致beforeunload事件的事件。具体来说,如果我点击指向另一个页面的链接,我想知道在beforeunload事件处理程序中链接是什么。

通过这种方式,我将根据URL的内容在beforeunload事件处理程序中执行不同的操作。

例如'http:'或'https:'警告用户丢失未保存的更改; 'mailto:'或'skype:'不警告用户,因为页面实际上不会被卸载。

我正在尝试为这样的问题构建一个很好的解决方案: mailto link (in chrome) is triggering window.onbeforeunload - can i prevent this?

2 个答案:

答案 0 :(得分:15)

我已经准备好告诉你这是不可能的,因为当你检查出event.target,event.originaltarget等时,onbeforeunload事件只报告被窗口触发。如果你覆盖window.onclick,但是,我们可以修改该方法以注册页面上最后一次单击的元素。然后,通过为window.onbeforeunload提供代码,我们可以指定新行为来检查最后点击的元素的href。万岁,啤酒!

这里的代码将为您提供您想要的信息,纯粹的javascript,并且无需在锚标记内添加任何内容。我还会在preventDefault()中弹出“弹出”这个页面要求您确认是否要离开 - 您输入的数据可能无法保存。确认框。希望这会有所帮助 - 你可以从这里找出要做的事情。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>12065389</title>
    <meta charset="utf-8">
    <script type="text/javascript">
        var last_clicked;

        window.onclick = function(e) {
            last_clicked = e.target;
            return true;
        }

        window.onbeforeunload = function(e) {
            var e = e || window.event;
            if (last_clicked.href) {
                alert(last_clicked.href);
                e.preventDefault();
            }
        }
   </script>
</head>
<body>
<a href="http://google.com">google</a>
</body>
</html>

答案 1 :(得分:0)

我可能会将事件附加到页面上的所有链接,而不是beforeunload事件。

类似的东西:

$("a").click(function(evt) {
    if($(this).attr('href').indexOf('http') == 0) {
        if(confirm("Are you sure?")) {
            //continue
        } else {
            evt.preventDefault();
        }
    }
}