Javascript 通过beforeunload但排除asp按钮捕获关闭窗口
我是javascript新手 这是一个下载确认页面。我在页面上有一个下载按钮 我想捕获关闭窗口事件以删除在Javascript 通过beforeunload但排除asp按钮捕获关闭窗口,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我是javascript新手 这是一个下载确认页面。我在页面上有一个下载按钮 我想捕获关闭窗口事件以删除在AjaxHandler.ashx中处理的临时PDF 通过下面的代码,我发现deletePDF将在窗口初始化时执行,在下载bottun单击时执行,但在关闭窗口时不会执行 我知道卸载前的将在几种情况下被激活,但为什么我关闭窗口时它不起作用?(已解决,更新以下代码) if(window.attachEvent){ attachEvent(“beforeunload”,deletePDF()); }
AjaxHandler.ashx
中处理的临时PDF
通过下面的代码,我发现deletePDF
将在窗口初始化时执行,在下载bottun单击时执行,但在关闭窗口时不会执行
我知道卸载前的将在几种情况下被激活,但为什么我关闭窗口时它不起作用?(已解决,更新以下代码)
if(window.attachEvent){
attachEvent(“beforeunload”,deletePDF());
}
else if(window.addEventListener){
addEventListener(“beforeunload”,deletePDF(),false);
}
函数deletePDF(事件){
var link=“Handler/AjaxHandler.ashx?filestring=“+getQueryStringByName”(“filestring”);
$.ajax({
键入:“获取”,
cache:false,
网址:link,
beforeSend:函数(XMLHttpRequest){
},
成功:功能(数据、文本状态){
},
完成:函数(XMLHttpRequest,textStatus){
},
错误:函数(){
}
});
}
更新
我通过一个注释点将addEventListener
中的deletePDF()
更正为deletePDF
现在,当我单击下载按钮并单击“X”关闭窗口时,代码将跳入deletePDF
我尝试clientY
来限制事件。但它不能对关闭窗口的动作做出反应。(我知道我想念键盘旁的窗口,希望有人有更好的解决方案)
if(window.event.clientY<0)
...
按钮如下所示:
,
我尝试设置一个标志,如提交
,但我发现如果我通过选中单击
按钮来使用标志,当我关闭按钮后的窗口时,处理程序将不会执行,因为按钮
标志已设置为真
。但我想检查每次触发AddEventListener时按钮是否会单击
对不起,我的英语很差,希望我能被理解
谢谢。最后,我使用一个标志来记录下载状态,如果状态为true
则清除该标志,以便每次检查时返回初始状态。我使用以下代码:
var下载=false;
document.addEventListener(“单击”),函数(){
下载=真;
})
addEventListener(“beforeunload”,function()){
if(下载)
下载=错误;
其他的
deletePDF();
})
假设这种情况:
userA进入页面,单击下载,现在download=true
李>
userB进入页面,直接关闭窗口,现在download=ture
,这样userB生成的临时文件就不会被删除
我在localhost中进行测试,在没有调试的情况下启动,在不同的浏览器中打开2个窗口,这种情况不会发生。我不确定这种方法是否有局限性
更新
我发现在我的情况下,我不需要与用户核对。这样我就可以使用unload
而不是beforeunload
,而且我不需要设置标志
window.addEventListener(“卸载”,deletePDF);
更新
根据,不建议使用unload
,正如文章所建议的,我们应该使用pagehide
。根据,似乎所有浏览器都支持它,但如果您想支持ie10及更低版本,您可以看到您必须使用卸载
var terminationEvent='onpagehide'在self中pagehide':'unload';
window.addEventListener(terminationEvent,deletePDF);
现在我没有环境来测试差异,并且在我的项目本地测试中两者都很好地工作
更新
unload
和pagehide
都不能在FF中正常工作。您只是在执行函数,应该是window.addEventListener(“beforeunload”,deletePDF,false)代码>@AlonEitan很有效,谢谢。但是下载按钮也会触发deletePDF,我尝试使用(window.event.clientYUse jquery's and用于绑定和解除绑定事件。请注意,这是不推荐使用的,使用时只会删除使用.bind()
附加的事件(同样适用于.on()
和.off()
)@你好,谢谢,但是当我使用jquery的.on()
和off
时,什么都没有发生。附件事件?你在引用什么古代文章。