【问题标题】:Can I prevent window.onbeforeunload when saving file uploaded to asp:fileupload保存上传到asp的文件时可以防止window.onbeforeunload:fileupload
【发布时间】:2017-01-14 16:47:44
【问题描述】:

我在 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>

【问题讨论】:

    标签: javascript jquery asp.net file-upload updatepanel


    【解决方案1】:

    您可以定义一个函数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 事件处理程序在所有浏览器中工作,如果您调用alert 则情况并非如此。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        将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”的东西是否正在调用该函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-15
          • 2016-04-23
          • 1970-01-01
          • 1970-01-01
          • 2012-10-13
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多