保存上传到 asp:fileupload 的文件时,我可以阻止 window.onbeforeunload

Can I prevent window.onbeforeunload when saving file uploaded to asp:fileupload

我在 aspx 页

上设置 window.onbeforeunload
  <script type="text/javascript">
              window.onbeforeunload = ShowMessage;

              function ShowMessage()
      {   
          alert("Do you want to close?")
      }
</script>

我将用户控件引向我的 aspx 页面。在我的 Ascx 控件中,我有一个文件上传和 asp 按钮。

一旦我上传了一个文件并点击按钮保存它,在它点击文件隐藏代码之前,出于某种原因 javascript 功能 ShowMessage() 正在弹出。 有什么办法可以限制这种情况的发生。当我上传文件并单击按钮保存时,我不需要弹出此消息。请建议我如何解决

Ascx.code:

<asp:UpdatePanel ID="upanel" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:PostBackTrigger ControlID="btnsave" />
    </Triggers>
    <ContentTemplate>
        <fieldset>
            <p>
                <div id="div1" runat="server" >
                    <asp:FileUpload ID="dcupload" runat="server"  />
                    <asp:Button ID="btnsave" runat="server" Text="Save"  CausesValidation="false" />
                </div>
            </p>
            <asp:Panel ID="UIPanelEnabled" runat="server">
                <asp:GridView ID="gvresults" runat="server" AllowSorting="true" AutoGenerateColumns="false">
                    <Columns>
                    </Columns>
                </asp:GridView>
            </asp:Panel>

    </ContentTemplate>
</asp:UpdatePanel>

似乎问题在于页面上的任何 link 在单击时都会触发 onbeforeunload,除非它是指向同一页面的 link。

向每个 link 的 onclick 事件添加一个 "return false"(控件中的大多数元素都是 link 触发 javascript 但不去任何地方)。这是我放在页面上的代码。

$('#id').click(function (e) {
                return false;
            });

将javascript改为

 <script type="text/javascript">
 window.onbeforeunload = ShowMessage;

 function ShowMessage()
 {   if(this.id.indexOf("btnsave") == -1)
         alert("Do you want to close?")
 }
 </script>

这将检查 id 包含 "btnsave" 的东西是否正在调用该函数。

您可以定义一个函数 DisableMessage 来重置 onbeforeunload 事件处理程序:

<script type="text/javascript">
    window.onbeforeunload = ShowMessage;

    function DisableMessage() {
        window.onbeforeunload = null;
    }

    function ShowMessage() {
        return "Do you want to close?";
    }
</script>

并在按钮的 OnClientClick 事件中调用该函数:

<asp:Button ID="btnsave" runat="server" OnClientClick="DisableMessage();" ... />

顺便说一下,只要在ShowMessage中返回一个字符串(如上所示)就可以让onbeforeunload事件处理程序在所有浏览器中工作,如果你调用[=17就不是这样了=].