Диалоговое окно jQuery не открывается второй раз

Я нашел этот поток, в котором в основном есть та же проблема, что и у меня. Но их решение у меня не работает.

Диалог появляется в первый раз, когда я нажимаю кнопку отправки, но не во второй раз. Я открываю диалоговое окно после отправки формы.

ОБНОВЛЕНИЕ

Наконец-то у меня все заработало. Вот правильный код:

   if (jQuery('#registrationforms').length > 0) {
     //instantiate the dialog 
     jQuery("#dialog").dialog({ modal:true, autoOpen:false });

     //Some more code here to call processRegistration function.
   }

  function processRegistration(instanceID, formData)
  {

    jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData, instanceID : instanceID },
      function(feedback)
      {
        jQuery('#dialog').text(feedback.message);
        jQuery('#dialog').parent().addClass(feedback.type);
        jQuery('#dialog').dialog('open');
      },"json");

  }

Поскольку я динамически применяю класс css, я должен обязательно добавить его во внешний DIV, который $ .dialog создает для обертывания моего «диалогового» DIV.


person Steven    schedule 23.09.2009    source источник


Ответы (3)


Не используйте dialog() для одновременной инициализации диалогового окна и его открытия. Я тоже совершил эту ошибку.

Сначала инициализируйте диалог, затем откройте его в обратном вызове следующим образом:

jQuery('#dialog').dialog({ autoOpen: false });

function processRegistration(instanceID, formData) {
jQuery.post(...,
  function(feedback) {
    var dialog = jQuery('#dialog');
    dialog.text(feedback.message);
    dialog.addClass(feedback.type);
    dialog.dialog('open');
  }, "json");
};
person a paid nerd    schedule 23.09.2009
comment
dialog.attr ('class', feedback.type) перезапишет классы по умолчанию. Мне нужно ДОБАВИТЬ класс. А как бы вы открыли диалоговое окно? - person Steven; 24.09.2009
comment
Ой! Отредактировано. (attr () - ›addClass (), добавлен открытый) - person a paid nerd; 24.09.2009
comment
Хорошо спасибо. Я по-прежнему получаю тот же результат, что и с моим обновленным кодом выше. И у меня все еще такая же проблема - CSS для добавленного класса не отображается. - person Steven; 24.09.2009
comment
Это почти сработает. Класс css нужно было применить к родительскому div. Смотрите мое решение. - person Steven; 25.09.2009
comment
Я принимаю ваш ответ как правильный, поскольку вы предоставили мне пример кода :) - person Steven; 25.09.2009

Я думаю, что ответ RayLehman, на который вы ссылались, является правильным решением.

Функция dialog () пользовательского интерфейса jQuery фактически создает диалог из некоторого содержимого. На самом деле вы нигде не называете «открыть» диалоговое окно.

Как только диалог создается путем первого вызова dialog (), вам просто нужно вызывать диалог («открыть») или диалог («закрыть»), вместо того, чтобы каждый раз заново создавать фактический объект диалога.

person womp    schedule 23.09.2009
comment
Womp прав, вам придется открывать диалог каждый раз, когда вам это нужно. - person Davide Gualano; 24.09.2009
comment
Я делаю это сейчас с моим исправленным кодом. Все, что мне сейчас не хватает, - это добавить правильный класс в зависимости от типа обратной связи. - person Steven; 24.09.2009

Похоже, вы завершили свое открытое событие вызовом init. Вам нужно убедиться, что вы сначала инициализируете свой диалог - обычно устанавливаете для свойства autoOpen значение false - а затем имеете отдельное событие щелчка для открытия вашего диалога.

Прочтите эту статью, чтобы объяснить это подробно.

person Phil.Wheeler    schedule 23.09.2009