Javascript 单击带有window.onbeforeunload的链接时出现问题

Javascript 单击带有window.onbeforeunload的链接时出现问题,javascript,jquery,hyperlink,popup,onbeforeunload,Javascript,Jquery,Hyperlink,Popup,Onbeforeunload,我有一个父divcontent\u div,它在一个表中包含表单元素,用户可以在其中选择多行元素(可单击的行),下载链接元素等 我有一个警告弹出窗口,提示用户所做的更改,然后尝试刷新而不单击“保存”按钮 当我选择一行并尝试单击该行内的下载链接时,我不需要显示警告弹出窗口。我有以下代码,但它不起作用 如果我没有选择任何行并尝试单击任何下载链接,它不会显示任何弹出窗口,这意味着这很好 如果我选择任何行,然后尝试单击任何下载链接,它会显示弹出窗口,这在我的情况下是错误的 如果用户单击my#conten

我有一个父div
content\u div
,它在一个表中包含表单元素,用户可以在其中选择多行元素(可单击的行),
下载链接元素

我有一个警告弹出窗口,提示用户所做的更改,然后尝试刷新而不单击“保存”按钮

当我选择一行并尝试单击该行内的下载链接时,我不需要显示警告弹出窗口。我有以下代码,但它不起作用

如果我没有选择任何行并尝试单击任何下载链接,它不会显示任何弹出窗口,这意味着这很好

如果我选择任何行,然后尝试单击任何下载链接,它会显示弹出窗口,这在我的情况下是错误的

如果用户单击my#content(内容#div之外的其他链接,则会显示对我来说正确的弹出窗口

$(函数(){
var-formmodified=0;
//单击表中每一行的事件
$(“.course_行”)。单击(函数(e){
-- -- -
formmodified=1;//将变量设置为1表示用户
已更改页面内的某些内容
});
//当表格提交时
$(“#提交”)。单击(函数(){
formmodified=0;//假设表单在表单更改后保存
});
//警告弹出窗口功能
window.onbeforeunload=确认退出;
函数confirmExit(){
变量元素=0;
//#content\u div是包含整个
目录
$('#content_div').children().on('click',函数(e){
console.log('clicked');
element_clicked=1;//表示单击的元素位于#content_div内,该div可以是链接或其他内容
});
console.log(单击元素);
编辑:当我单击div中的任何元素时,我总是将元素\u clicked值设置为0。值为“clicked”
正在显示。我不知道为什么值
因为变量未设置为1
如果(单击元素){
//元素=假;
return;//卸载前中止
}否则{
如果((!element_clicked)&&(formmodified==1)){
return“未保存所选课程。
你想离开这一页吗?”;
}
}
}
});
在这种情况下,请帮助我。提前感谢您

只需将
click()
事件添加到锚定元素并在卸载
事件之前解除绑定
on即可

$(“a”)。在('click',function()上{
window.onbeforeunload=null;
});
这只是一个例子。您可以向选择器添加类或id,以便仅当单击特定的锚定标记时,事件才会取消绑定

例如

$(“#content_div a”)。在('click',function()上{
window.onbeforeunload=null;
});
编辑

如果要在卸载之前添加
on
以刷新,则必须在尝试任何更改时执行此操作,或者在按下
F5
按钮时仅添加事件

老实说,我认为第一种解决方案更好,因为即使用户单击浏览器中的刷新按钮,弹出窗口也会出现

因此,您必须更改您的功能

如果你不想。下面是一个快速添加到
F5
按钮

$(document.body).on("keydown", this, function (event) {
    if (event.keyCode == 116) {
        window.onbeforeunload = true;
    }
});

当我使用此代码时,当刷新页面时,弹出窗口不会出现。功能不可用working@Techy这只是一个例子。您可以向选择器添加类或id,以便仅当单击特定的锚定标记时,事件才会取消绑定。jQuery选择器与css$(document)相同;它现在可以工作了,但我面临的一个问题是,当我尝试单击f5时,它会刷新页面而不弹出窗口