javascript - SetTimeOut 和回发发生后如何关闭模态

标签 javascript c# jquery asp.net ajax

这是我的问题:在我的网页中,我有电子邮件文本框和提交按钮,当用户单击提交按钮时,就会发送电子邮件。这种过程需要一点时间,所以我考虑向用户显示带有加载面板的模态窗口,尽管该过程已经完成,但我给模态显示窗口卡住的时间过后,事情就发生了。

我的问题是如何在模态的 SetTimeout 和回发发生后关闭模态???

这是我的代码以及对我有帮助的代码的链接。 http://www.aspsnippets.com/Articles/Display-loading-progress-image-when-Page-Loads-or-does-PostBack-using-ASPNet.aspx

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

      function ShowProgress() {
            setTimeout(function () {
                var modal = $('<div />');
                modal.addClass("modal");
                $('body').append(modal);
                var loading = $(".loading");
                loading.show();
                var top = Math.max($(window).height() / 2 - loading[0].offsetHeight / 2, 0);
                var left = Math.max($(window).width() / 2 - loading[0].offsetWidth / 2, 0);
                loading.css({ top: top, left: left });
            }, 200);
            __doPostBack("<%=btnSubmit.UniqueID %>", "");
             // How to close the modal after 200 sec are over and postback been execute 
        }



   Email:<asp:TextBox name="Email" ID="txtemail" ValidationGroup="Group" runat="server"  Width="330px"/>

                    <asp:RequiredFieldValidator ID="requiredFieldValidatorEmail" runat="server" ControlToValidate="txtemail"
                        Display="Dynamic" ErrorMessage="Req" ForeColor="Red" SetFocusOnError="True" ValidationGroup="Group"
                        CssClass="validationClass"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="revEmail" runat="server" ErrorMessage="Please Enter Valid Email"
                        ValidationGroup="vgSubmit" ControlToValidate="txtEmail" CssClass="requiredFieldValidateStyle"
                        ForeColor="Red" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"> </asp:RegularExpressionValidator>
                              <asp:Button ID="btnSubmit" ValidationGroup="Group" runat="server" Text="Submit" OnClick="passwordSubmit_Click"   OnClientClick="ShowProgress();"/>
                              <div class="loading" align="center">
                                Loading. Please wait.<br />
                                <br />
                                <img src="Images/Layout/ajax-loader.gif" alt="" />
                              </div>
<style type="text/css">
       .modal
        {
            position: fixed;
            top: 0;
            left: 0;
            background-color: black;
            z-index: 99;
            opacity: 0.8;
            filter: alpha(opacity=80);
            -moz-opacity: 0.8;
            min-height: 100%;
            width: 100%;
        }
        .loading
        {
            font-family: Arial;
            font-size: 10pt;
            border: 5px solid #808080;
            width: 200px;
            height: 100px;
            display: none;
            position: fixed;
            background-color: White;
            z-index: 999;
        }
     </style>

返回代码:

 Protected Sub passwordSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If revEmail.IsValid Then
            Dim dba As New DBAccess
            Dim email As String = ""
            Dim password As String = ""

            Dim ds As DataSet = dba.GetForgotPasswordEmail(m_UserName, txtemail.Text, m_CompanyCode)
            If Not ds Is Nothing Then

                Dim dr As DataRow = ds.Tables(0).Rows(0)
                email = dr("Email")
                password = dr("Password")
                Dim fpMessage As New SendForgotEmailPassword
                fpMessage.SendForgotPasswordEmail(email, password)
                lblEmailSent.Text = "Email has been sent."
                lbToLoginPage.Visible = True

            Else
                lblEmailSent.Text = "No Such Email."
                lbToLoginPage.Visible = True
            End If
        Else
            lbToLoginPage.Visible = False
        End If
    End Sub

最佳答案

您应该在回发中添加回调

function ShowProgress() {

        // I guess it shows your modal
        setTimeout(function () {
            var modal = $('<div />');
            modal.addClass("modal");
            $('body').append(modal);
            var loading = $(".loading");
            loading.show();
            var top = Math.max($(window).height() / 2 - loading[0].offsetHeight / 2, 0);
            var left = Math.max($(window).width() / 2 - loading[0].offsetWidth / 2, 0);
            loading.css({ top: top, left: left });
        }, 200);

        // Gets the request manager
        var requestManager = Sys.WebForms.PageRequestManager.getInstance();

        // Callback function will be called after __doPostBack
        function EndRequestHandler(sender, args) {
            // This will be executed after __doPostBack
            // Here's you should put your code to close modal!

            // Remove the request handler
            requestManager.remove_endRequest(EndRequestHandler);
        }

        // Tells the request manager we are adding a callback
        requestManager.add_endRequest(EndRequestHandler);

        __doPostBack("<%=btnSubmit.UniqueID %>", "");

    }

关于javascript - SetTimeOut 和回发发生后如何关闭模态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726964/

相关文章:

javascript - 如何在书签中包含外部 javascript 文件?

c# - 网页的电子邮件内容

c# - 压缩视频文件

c# - 面板上的矩形区域以捕获鼠标输入

c# - 如何将 ListView 绑定(bind)到存储在 WPF 中单个 ViewModel 中的多个集合?

javascript - 创建事件处理程序时,jQuery 是否会修改目标元素?

javascript - 从打印内容保存 pdf HTML JAVASCRIPT

javascript - 如何修复 Highcharts 中 y 轴上数组的值

javascript - dwr addoptions 与关联数组

javascript - 使用 codeiginter 加密库对数据进行编码并使用 js-mcrypt 进行加密