Javascript 如何禁用window.onbeforeunload from<;a>;标签?

Javascript 如何禁用window.onbeforeunload from<;a>;标签?,javascript,jquery,Javascript,Jquery,首先,我在我的应用程序上使用了window.onbeforeunload。它在页面上方工作,但当单击锚定链接时,它应该被禁用。有什么想法吗?请分享。我的代码如下,它不工作: var submitFormOkay = false; window.onbeforeunload = function () { if (!submitFormOkay) { return "Don't delay your Success. Get FREE career counselling

首先,我在我的应用程序上使用了
window.onbeforeunload
。它在页面上方工作,但当单击锚定链接时,它应该被禁用
。有什么想法吗?请分享。我的代码如下,它不工作:

var submitFormOkay = false;
window.onbeforeunload = function () {
    if (!submitFormOkay) {
        return "Don't delay your Success. Get FREE career counselling session. Fill in the details below";
    } else {
        submitFormOkay = '';
    }
}

<a class="navbar-brand" href="http://www.google.com">Click</a>
var submitFormOkay=false;
window.onbeforeunload=函数(){
如果(!submitFormOkay){
return“不要耽误你的成功。获得免费的职业咨询课程。填写以下详细信息”;
}否则{
submitFormOkay='';
}
}

您可以在
document.body
上附加一个全局单击处理程序,如果单击通过
a
元素,该处理程序将
submitFormOkay
设置为
true
(或者您可以使用另一个变量绕过检查,或者只需通过将
null
赋值给
窗口来清除处理程序。onbeforeuload
),例如:


没有jQuery(因为我最初错过了
jQuery
标记):


使用jquery,可以如下所示:

var submitFormOkay = false;
$(window).on('beforeunload',function () {
    if (!submitFormOkay) {`enter code here`
        return "Don't delay your Success. Get FREE career counselling session. Fill in the details below";
    } else {
        submitFormOkay = '';
    }
})

<a class="navbar-brand" href="http://www.google.com">Click</a>
$('a').on('click',function(e){
    e.preventDefault();
    $(window).off('beforeunload');
    window.location = $(this).attr('href');
});
var submitFormOkay=false;
$(窗口).on('beforeunload',函数(){
如果(!submitFormOkay){`请在此处输入代码`
return“不要耽误你的成功。获得免费的职业咨询课程。填写以下详细信息”;
}否则{
submitFormOkay='';
}
})
$('a')。在('click',函数(e)上{
e、 预防默认值();
$(窗口).off('beforeunload');
window.location=$(this.attr('href');
});

您可以使用onclick功能,在该功能中,您可以禁用它。为什么要在文档中的每个元素之间循环?没有这些开销,你就不能这样做。根据您的
code
在每次单击事件中,它都会循环遍历所有元素,并检查元素是否为
anchor
。@Mayank:我没有循环遍历文档中的每个元素。当点击发生时,当点击到达
body
时,上面的内容将查看点击以z顺序穿过的元素(通常很少,甚至10深都是不寻常的,但1000深仍然不是问题)。假设你有一个div和另一个div,还有一个div和一个段落,其中有一个span和一个em。单击em,它会查看em、span、段落、div、div、div,然后在body处停止。琐碎的,特别是对用户操作(如单击)的响应。是否遍历到父级,直到解决方案真正需要主体?@Mayank:这是标准事件委派。你似乎认为这是低效的或奇怪的;两者都不是。我们将单个处理程序连接到单个元素上,而不是将处理程序附加到文档中的每个锚元素上。如果动态添加新的锚点,而不必在这些新元素上钩住处理程序,那么它就可以工作。等
document.body.addEventListener("click", function(e) {
    var element;
    for (element = e.target; element != document.body; element = element.parentNode) {
        if (element.tagName.toUpperCase() === "A") {
            submitFormOkay = true; // Or set another flag you'll check,
                                   // or clear onbeforeunload entirely
            break;
        }
    }
}, false);
var submitFormOkay = false;
$(window).on('beforeunload',function () {
    if (!submitFormOkay) {`enter code here`
        return "Don't delay your Success. Get FREE career counselling session. Fill in the details below";
    } else {
        submitFormOkay = '';
    }
})

<a class="navbar-brand" href="http://www.google.com">Click</a>
$('a').on('click',function(e){
    e.preventDefault();
    $(window).off('beforeunload');
    window.location = $(this).attr('href');
});