Закрытие диалогового окна jQuery Modal после обратной передачи ASP.NET открывает его снова - PullRequest
1 голос
/ 05 марта 2012

У меня есть ссылка HTML, которая открывает модальное диалоговое окно jQuery, которое содержит iFrame.Этот iFrame содержит форму, которая должна закрывать диалог после обратной передачи (Ok или Cancel).

В моей обратной передаче я добавляю функцию javascript в iFrame, которая закрывает диалоговое окно, и она отлично работает.Однако проблема в том, что после того, как пользователь нажмет кнопку Ok или Cancel, диалоговое окно закроется и откроется снова!Что я делаю не так?

Вот мой код:

Вызов страницы HTML:

<html>
<head>
    <link rel="stylesheet" type="text/css" href="theme/south-street.css" media="screen" id="themeCSS" />

    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#dlgConfirm").dialog({
                autoOpen: false,
                resizable: false,
                modal: true,
                width: 550,
                height: 300,
                close: function (event, ui) { alert('closed') }
            })
        });


        function fConfirm(tId) {
            alert('ddd');
            $('#dlgConfirm').children().attr('src', 'ConfirmTracking.aspx?tId=' + tId)
            .load(function () {
                $("#dlgConfirm").dialog('open');
            });
            return false;
        }
    </script>
</head>
<body>
    <div style="display: none">
        <div id="dlgConfirm" title="Confirm Tracking" style="padding: 0px">
            <iframe style="margin: 0px; padding: 0px" marginheight="0" marginwidth="0" src="" width="100%" height="100%" frameborder="0"></iframe>
        </div>
    </div>

    <a href="#" onclick="return fConfirm('109')">Click me</a>
</body>
</html>

Страница iFrame

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ConfirmTracking.aspx.cs" Inherits="Chicken.ConfirmTracking" %>
<html>
<head runat="server">
    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
    <script type="text/javascript">
        function CloseThis() {
            parent.$('#dlgConfirm').dialog('close');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <br />
        <asp:TextBox ID="edtTrackingNo" runat="server"></asp:TextBox>
        <br /><br />
    <asp:Button ID="btnOk" runat="server" Text="Ok" />
    <asp:Button ID="btnCancel" runat="server" onclick="Cancel_Click" Text="Cancel" />
    </form>
</body>
</html>

Код кадра iFrame:

using System;

namespace Chicken {
    public partial class ConfirmTracking: System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {

        }

        protected void Cancel_Click(object sender, EventArgs e) {
            ClientScript.RegisterClientScriptBlock(this.GetType(), "none", "<script>$(function(){CloseThis()});</script>");
        }
    }
}

1 Ответ

1 голос
/ 05 марта 2012

Мне удалось отследить вашу проблему, загрузка в function fConfirm(tId) снова срабатывает после закрытия вашего диалога.Кажется, это ошибка.Грязный способ исправить это - добавить глобальную переменную на вашу страницу и установить для нее значение true, чтобы показать, что диалог открывается через функцию, а затем перед открытием диалога, если переменная истинна, откройте диалог.не забудьте снова установить для вашей переменной значение false, чтобы вы могли заново открыть диалог, если это необходимо.

ваша функция будет выглядеть следующим образом:

    var loadedByFunction = false;

    function fConfirm(tId) {
        loadedByFunction = true;
        $('#dlgConfirm').children().attr('src', 'ConfirmTracking.aspx?tId=' + tId)
        .load(function () {
            if (loadedByFunction) {
                loadedByFunction = false;
                $("#dlgConfirm").dialog('open');
            }
        });
        return false;
    }
...