2010-04-27 1 views
4

Хорошо, поэтому у всех модалов уже есть изображение в правом верхнем углу, чтобы закрыть их. Как я могу сделать еще один якорь, чтобы сделать то же самое? Я думал, что могу использовать опцию «closeClass», которая по умолчанию «simplemodal-close» и просто добавляет этот класс к якорю, но не имела желаемого эффекта. Это то, что я должен делать? Кроме того, у всех модалов будет ссылка «связаться с нами», которая должна закрыть его собственный модальный и открыть контактный модальный. Как я могу подождать, пока он не будет закрыт, чтобы открыть следующий?Jquery simplemodal закрыть существующие модальные и открыть новый?

Идеи?

$('a#ask').click(function(){ 
     $.modal.close(function(){ 
     }); 
     $('#modal-contact').modal(); 
    }); 

ответ

3

1) При назначении simplemodal-close к элементу, который находится в диалоговом содержании, SimpleModal будет автоматически связывать тесную функцию щелкать событие для этого элемента.

2) Существует несколько способов сделать это путем замены содержимого или первого закрытия диалога с помощью $ .modal.close(); затем открывается новый.

UPDATE

$('a#ask').click(function(){ 
    $('#modal-contact').modal({onShow: function (dialog) { 
     // handle the close yourself. 
     // Don't use the closeClass on this element 
     // call $.modal.close(); when you are done 
     // call a function to open a new modal 
    }); 
    return false; 
}); 
+0

Я могу закрыть его, но по какой-то причине я не могу понять, как открыть новый. Я пробовал код (я помещаю его в свой оригинальный пост), но он, похоже, не работает. Модаль закрывается, но не открывает модально-контактный. – Matthew

+0

Я обновил свой комментарий - надеюсь, он поможет с вашим вопросом. –

1

Для ответа на второй вопрос - как закрыть существующий модальность, а затем открыть новый один - вам нужно сделать три вещи:

  1. Добавить Persist: true для опции обратного вызова первого модального файла. Согласно сайту Эрика Мартина: «Если это правда, данные будут поддерживаться между модальными вызовами, если они ошибочны, данные будут возвращены в исходное состояние».
  2. Добавить onClose callback к первому модальному.
  3. Закройте первый модальный ПЕРЕД вызовом функции, чтобы открыть второй модальный.

Итак, когда вы закрываете модальный с $ .modal.close(), то OnClose будет работать, таким образом, вызывая анимацию и закрытия модального. С persist is true, следующая функция будет сохранена. Ваша функция будет срабатывать, а вторая мода откроется.

$("#first_modal").modal({ 
    containerId: 'modal_id', 
    persist: true, 
    onClose: function (dialog) { 
    dialog.container.fadeOut(100, function() { 
     dialog.overlay.fadeOut(200, function(){ 
      $.modal.close(); 
      showSecondModal();  
     }); 
    }); 

} });

2

Текущее событие onClose действует как onBeforeClose, а не onAfterClose для $ .modal.close(). Единственным обходным решением является подождать:

$ .modal.close(); window.setTimeout (showSecondModal, 500);

+0

Замечательное наблюдение, проведенное два драгоценных часа в этой охоте на уток, спасибо –

1

Обновление до последней версии SimpleModal, в настоящее время 1.4.4. Ошибка таймаута была зафиксирована в 1.4.2 в соответствии с http://www.ericmmartin.com/simplemodal-1-4-3-released/:

Удален оперные работами вокруг близко(), который вызывает проблемы

Ваш код выше, с небольшим изменением, должен работать, как ожидалось:

$('a#ask').click(function(){ 
    $.modal.close(); 
    $('#modal-contact').modal(); 
}); 

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

  • Нет связанных вопросов^_^