Flush jqModal всплывающее содержимое при закрытии всплывающего окна
Я использую всплывающие окна jqModal, используются два разных всплывающих окна, которые запускаются из разных разделов кода. Оба всплывающих окна запускаются плавно, но когда я закрываю всплывающее окно и открываю другое, окно наложения заполняет содержимое обоих всплывающих окон. Я использую jqmHide(), чтобы закрыть всплывающее окно. Есть ли способ, чтобы закрыть всплывающее содержимое, когда я закрываю его?
$('a.jqModal').click(function(event){
event.stopPropagation();
$( $(this).attr('href') )
.jqm({ modal:true, overlay:80, toTop: true })
.jqmShow();
return false;
});
$(".jqm").click(function () {
$("#Dv_AddProfile").jqmHide();
$("#Dv_DuplicateProfile").jqmHide();
});
Html:
<div id="Dv_AddProfile" class="jqmWindow">
<span id="Spn_Close" class="jqm"><button>Close</button></span>
//...
//popup content
</div>
<div id="Dv_DuplicateProfile" class="jqmWindow">
<span id="Spn_Close" class="jqm"><button>Close</button></span>
//...
/// popup content
</div>
1 ответ
Этот код выглядит немного странно. Инициализируйте ваши модалы один раз через;
$('div.jqmWindow').jqm({
modal:true,
overlay:80,
toTop: true,
trigger: False
});
Я установил для триггера значение false, потому что заметил, что вы запускаете модалы вручную. По умолчанию ищет элементы привязки с классом "jqModal".
Вы не включили элементы привязки в пример HTML, но я предполагаю, что они выглядят так:
<a href="#Dv_AddProfile" class="jqModal">Open AddProfile Modal</a>
<a href="#Dv_DuplicateProfile" class="jqModal">Open DuplicateProfile Modal</a>
Затем вы можете запустить модалы аналогичным образом без необходимости в event.stopProgogation(); например
$('a.jqModal').click(function(){
$( $(this).attr('href') ).jqmShow();
return false;
});
Теперь давайте воспользуемся поведением по умолчанию closeClass. Таким образом, вам не нужна функция $(". Jqm"). Click(), чтобы закрыть ваши модалы.
Измените класс jqm закрывающих элементов span на "jqmClose", например
<div id="Dv_DuplicateProfile" class="jqmWindow">
<span id="Spn_Close" class="jqmClose"><button>Close</button></span>
//...
/// popup content
</div>
ПРИМЕЧАНИЕ: вам может понадобиться переместить класс jqmClose в элемент button, чтобы событие click было запущено; например
<span id="Spn_Close"><button class="jqmClose">Close</button></span>
В КОНЦЕ КОНЦОВ; если вы хотите очистить содержимое модала при скрытии, сделайте это с помощью специального обратного вызова onHide. Я часто сталкиваюсь с этой проблемой (например, чтобы остановить воспроизведение видео без необходимости беспокоиться о API JavaScript в плагине).
Что-то вроде
onHide: function(hash){
// hide modal
hash.w.hide();
// clear content
$('div.cleared-on-close',hash.w).empty();
// remove overlay
hash.o.remove();
}
Итак, вот ваш модифицированный пример;
наценка
<a href="#Dv_AddProfile" class="jqModal">Open AddProfile Modal</a>
<a href="#Dv_DuplicateProfile" class="jqModal">Open DuplicateProfile Modal</a>
<div id="Dv_AddProfile" class="jqmWindow">
<span id="Spn_Close"><button class="jqmClose">Close</button></span>
<div class="cleared-on-close">...</div>
...
</div>
<div id="Dv_DuplicateProfile" class="jqmWindow">
<span id="Spn_Close"><button class="jqmClose">Close</button></span>
<div class="cleared-on-close">...</div>
...
</div>
Javascript
$('div.jqmWindow').jqm({
modal:true,
overlay:80,
toTop: true,
trigger: False,
onHide: function(hash){
// hide modal
hash.w.hide();
// clear content
$('div.cleared-on-close',hash.w).empty();
// remove overlay
hash.o.remove();
}
});
$('a.jqModal').click(function(){
$( $(this).attr('href') ).jqmShow();
return false;
});
Надеюсь это поможет!