Javascript 通过beforeunload但排除asp按钮捕获关闭窗口

Javascript 通过beforeunload但排除asp按钮捕获关闭窗口,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我是javascript新手 这是一个下载确认页面。我在页面上有一个下载按钮 我想捕获关闭窗口事件以删除在AjaxHandler.ashx中处理的临时PDF 通过下面的代码,我发现deletePDF将在窗口初始化时执行,在下载bottun单击时执行,但在关闭窗口时不会执行 我知道卸载前的将在几种情况下被激活,但为什么我关闭窗口时它不起作用?(已解决,更新以下代码) if(window.attachEvent){ attachEvent(“beforeunload”,deletePDF()); }

我是javascript新手

这是一个下载确认页面。我在页面上有一个下载按钮

我想捕获关闭窗口事件以删除在
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
    时,什么都没有发生。附件事件?你在引用什么古代文章。