jquery window.onbeforeunload无法使用href = javascript函数

时间:2014-05-15 11:32:14

标签: javascript jquery html css3

我有以下代码使窗口卸载会话无效

window.onbeforeunload = function(event) {
    if (typeof event == 'undefined') {
        event = window.event;
    }
    if (event) {
        console.log("closing the browser, invalidating the session");
        $.ajax({
            url : "/inValidateOnBrowserClose.html",
            type : "get",
            cache : false,
        }).done(function(data) {
            console.log(" invalidated session on browser close event");
        });

    }
    return true;
};

$(function() {
    $("a").click(function() {
        window.onbeforeunload = null;
    });
    $("button").click(function() {
        window.onbeforeunload = null;
    });

});

一切正常,但我有一个页面,我有一个动态创建的按钮。

<span class="myButton"><a href="javascript:submitForm" >Update </a></span>

当我点击上面的锚点(按钮)时,我的窗口卸载事件被调用(在我的情况下它不应该被调用),我很惊讶为什么$("a").click(function())没有被调用,我试图修复这但没有运气。谢谢你的回答

1 个答案:

答案 0 :(得分:2)

您需要在此处使用delegate来将点击事件绑定到动态生成的元素:

$(function() {
    $(document).delegate("a","click",function() {
        window.onbeforeunload = null;
    });
    $(document).delegate("button","click",function() {
        window.onbeforeunload = null;
    });

});

这适用于已有的元素,因此无需编写单独的点击绑定。

对于firefox用户delegate功能可能无效,因此可以使用on。请看下面的代码

$(function() {
        $("a").on("click",function() {
            window.onbeforeunload = null;
        });
        $("button").on("click",function() {
            window.onbeforeunload = null;
        });

    });

Stackoverflow Issue