2012-03-20 3 views
1

Im имея вопрос, где мои диалоговые нагрузки JQuery UI несколько раз поверх себя:диалоговое окно 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 

Именно то, что описано здесь: Why does my modal jQuery dialog open multiple times?

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

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

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

$(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

Поскольку вы не воссоздавать диалоговые окна, вам не нужно, чтобы удалить их. Является ли этот код внутри какой-либо другой функции, которая запускается более одного раза? –

+0

ok Я удалил вызов remove(). И нет ни в какой другой функции. Все находится непосредственно внутри $ (document) .ready, за исключением функции openInDialog, которая находится непосредственно за ее пределами. Я скачал расширение визуальной студии, которое будет соответствовать скобкам js. – parliament

ответ

1

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

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

+0

Я, наконец, понял это. Это была загрузка дубликата из-за этой строки: openInDialog ($ registerDialogHandle, "/ Account/Register? Path = _RegisterPartial"); Проблема была с частичным представлением, я загрузил этот скрипт на страницу макета и частичный вид, чтобы дублирование было связано с тем, что сам скрипт присутствовал в двух местах. Большое спасибо за вашу помощь, jsfiddle очень помог изолировать проблему до чего-то совершенно другого. ciao – parliament

+0

Ah. Имеет смысл. Рад, что ты это понял. –

Смежные вопросы