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