Закрытие диалога при клике вне его
Добрый день, дорогие форумчане
Битый час сижу, и никак не могу понять, как реализовать мою задумку. У меня на сайте есть несколько диалоговых окон Всё реализовано так HTML Код:
<div class="header">
</div>
<div class="wrapper">
<div class="description">
<button class="descr_but"></button>
<div class="description_block" title="Описание 2">
<p>Какой-то текст 2</p>
</div>
</div>
<div class="description">
<button class="descr_but"></button>
<div class="description_block" title="Описание">
<p>Какой-то текст</p>
</div>
</div>
</div>
<div class="footer">
</div>
Код JQ:
$(document).ready(function () {
var dialogBox = $('.description_block').dialog({
autoOpen: false,
show: {
effect: 'blind',
duration: 1000
},
hide: {
effect: 'fold',
duration: 1000
}
});
$('.descr_but').click(function () {
dialogBox.eq($(this).index('.descr_but')).dialog('open');
});
Мне нужно, чтобы диалоговое окно ".description_block" закрывалось при нажатии на любую область вне его. Я пробовал делать так:
$("body").not(".description").not(".descr_but").not(".description_block").click(function(){
$(".description_block").dialog("close");
});
Но когда я нажимаю на кнопку ".descr_but" после появления диалоговое окно сразу же закрывается. Помогите пожалуйста советом Заранее спасибо. |
Опции такой не вижу. Примерный план - событие create, в нем навешивать обработчик на оверлей. Возможно придется смотреть код реализации.
Как грязный хак:
$('.ui-widget-overlay').click(function() {
$(this).prev().dialog('close');
});
|
Цитата:
Прошу прощения за мою глупость, но я не понял совсем ничего) |
QNester,
modal: true и тогда
$("body").on("click",".ui-widget-overlay",function() {
$(".description_block").dialog("close")
})
или так без параметра модальносьти
$(document).on("click", function (event) {
if ($(".ui-dialog").has(event.target).length === 0) $(".description_block").dialog("close") ;
});
|
Цитата:
C модулем всё заработало, а без модуля почему так же: сначала открывается диалог, а потом сразу же закрывается |
Залезу и я со своими 5 копейками - так можно и без модальности и с модальностью
$(document).click(function(e){
if(!$(e.target).closest('.ui-dialog').length) {
$(".description_block").dialog("close");
}
})
|
QNester, какой тогда смысл в не-модальности если работать будет все же как модальный?
|
Цитата:
$('.descr_but').click(function (*!*event*/!*) {
*!* event.stopPropagation();*/!*
dialogBox.eq($(this).index('.descr_but')).dialog('open');
});
|
Хотел было сделать нормально, по событию, через ссылку в виджете на оверлей. Посмотрел код реализации - и чета приуныл... Короче jquery ui - гавно. Оверлей создается при первом open(). В конце метода триггерится событие open, но параметр ui при этом - пустой объект, сцукко!
|
| Часовой пояс GMT +3, время: 11:51. |