JavaScript "beforeunload" 事件未触发,当我使用更新面板



我的问题是在我单击"更新面板"中的按钮并关闭窗口," nunload"事件不是fire,而当我单击另一个按钮时,此事件会正确触发。这是我的代码:

function dontlogout() //for postback refreshes
{
    postback = true;
    alert(postback);
}
$(window).bind('beforeunload',function() {
    if(postback==false)
    {   
       //my logout code here;
    }
    else
    {
        postback = false;
     }
    });  
<asp:Button runat="server" ID="cmdOut"  OnClientClick="dontlogout();" Text="next"  OnClick="cmdOut_Click"></asp:Button>
<asp:UpdatePanel runat="server" ID="updQuestion"   >
    <ContentTemplate>                         
<asp:Button runat="server" ID="cmdNext"  OnClientClick="dontlogout();"      Text="next" OnClick="cmdNext_Click"></asp:Button>
 </ContentTemplate></asp:UpdatePanel> 

当我单击cmdout按钮时,没有问题,当关闭浏览器时执行我的登录代码时,但是当我在"更新面板"中单击cmdnext,然后关闭浏览器,然后关闭未执行的登录代码。

我怎么解决这个问题?

您必须在onbeforeunload

的功能回调中返回
$(window).bind('beforeunload',function() {
    if(postback==false)
    {   
       //my logout code here;
      // 👈🏼 Ok you can leave because you dont return
    }
    else
    {
        postback = false;
        return  "You cannot leave";  //👈🏼 You cannot leave
     }
    });  

在更新面板的结束标签之前添加'触发器'标签

<asp:UpdatePanel runat="server" ID="updQuestion"   >
    <ContentTemplate>                         
<asp:Button runat="server" ID="cmdNext"  OnClientClick="dontlogout();"      Text="next" OnClick="cmdNext_Click"></asp:Button>
 </ContentTemplate>
 <Triggers>
       <asp:PostBackTrigger ControlID="cmdNext" />
  </Triggers>
</asp:UpdatePanel> 

最新更新