JQuery UI диалог открывается несколько раз - PullRequest
1 голос
/ 21 марта 2012

У меня проблема с тем, что диалоговое окно my jquery UI загружается несколько раз поверх себя:

click -> opens dialog(1 time) -> close dialog
click - > opens dialog(2 times) -> close dialog
click - > opens dialog(4 times) -> close dialog
click - > opens dialog(8 times) -> close dialog

Именно то, что описано здесь: Почему мой модальный диалог jQuery открывается несколько раз?

Я выбрал следующее решение, но у меня оно не сработало. Решение, которое работало для этого человека, было:

1) инициализировать диалог вне функции 2) открывать только при успешном обратном вызове из load ()

Как вы можете видеть, я делаю обе вещи в следующем коде, но проблема все еще сохраняется. Пожалуйста помоги: (Между прочим, общая структура заключается в том, что я загружаю диалоговое окно по щелчку ссылки. Затем, когда нажимается кнопка «Регистрация» внутри этого диалогового окна, я загружаю другое небольшое диалоговое окно подтверждения сверху с помощью кнопки «ОК», которая закрывает оба диалоговых окна.)

$(document).ready(){
   var $registerDialogHandle = null;
    var $registerStatusDialogHandle = null;

    $registerDialogHandle = $('<div></div>').html("").dialog({
        autoOpen: false, modal: true,  width: 470, height: 552,
        buttons: {
            "Register": function () {
                if ($('#registerForm').validate().form()) {
                    $.ajax({
                        ...ajax settings...
                        success: function () {
                            openInDialog($registerStatusDialogHandle, "/Account/RegisterStatus");
                        }
                    });
                }
            }
        }
    });

    $registerStatusDialogHandle = $('<div></div>').html("").dialog({
        autoOpen: false, modal: true, width: 365, height: 165,
        buttons: {
            "OK": function () {
                $(this).dialog("close");
                $registerDialogHandle.dialog("close");
            }
        }
    });

    $('.registerLink').live("click", function () {
        openInDialog($registerDialogHandle, "/Account/Register?path=_RegisterPartial");
    });
} /*End of document.ready()*/

function openInDialog(dialog, target) {
    var $url = target;
    var $dialog = dialog;
    $dialog.empty();
    $dialog.dialog("option", "position", "center").load($url, function () {
         $dialog.dialog("open");
    });
}

1 Ответ

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

Кажется, работает нормально, если я изменим .remove() звонки на .hide() звонки:

http://jsfiddle.net/jtbowden/s6SxE/

...