Пользовательский интерфейс jQuery Dialog не может определить, нажата ли кнопка закрытия - PullRequest
0 голосов
/ 03 июня 2011

У меня есть диалоговое окно, использующее плагин Dialog UI jQuery.Я пытаюсь определить, закрыл ли пользователь окно с помощью кнопки «X» в верхнем правом углу заголовка, но не повезло.Я пробовал:

$('.myModal').dialog({
    title: 'dialog 1',
    beforeClose: function(){
        //do something
    }
}).dialog("open");

Это будет выполнять функцию независимо от действий пользователя.то есть, если пользователь нажимает кнопку «ОК» вместо кнопки «X».

Я просмотрел документацию диалогового окна и не могу найти событие, метод или параметр, которые дают мне результаты, которые янаходясь в поиске.Любые идеи будут высоко оценены.

Ответы [ 5 ]

7 голосов
/ 03 июня 2011

Проверьте эту ссылку ...

http://forum.jquery.com/topic/jquery-dialog-close

Четвертый ответ - тот, который вы ищете, и тем более он ссылается на эту ссылку.

http://jsbin.com/obafo

... где он настроил пример для просмотра, который имеет этот код ...

$("#dialog").dialog({

close: function(event, ui) {

    if ( event.originalEvent && 
                $(event.originalEvent.target).closest(".ui-dialog-titlebar-close").length ) {

        $("body").append("do some  stuff<br>");

    }

}

})
.find("button")
.click(function() {

    $("body").append("just close  dialog<br>");

    $(this).closest(".ui-dialog-content").dialog("close");

});
3 голосов
/ 03 июня 2011

Вам необходимо включить два необязательных аргумента для функции обратного вызова beforeClose.

$('.myModal').dialog({title: 'dialog 1'
                  beforeClose: function(event,ui){ //do something }}).dialog("open");

Вам необходимо проверить переменные события и / или пользовательского интерфейса и выяснить, была ли нажата «X» или нет.

2 голосов
/ 17 октября 2012

Предполагается, что вы не изменили закрывающий текст по умолчанию, который отображается как X, но внутренний текст имеет значение 'close'

$('#acceptsignaturediv').dialog({
             title: 'my Title',
             height: 400,
             width: 400,
             buttons: { "Accept": function () { alert('Accept'); },
                 "Decline": function () { alert('Decline'); }
             },
             beforeClose: function (event, ui) { if (event.originalEvent != undefined && event.originalEvent.srcElement.innerText == "close") { alert('You must accept or decline'); return false; } }
         });
2 голосов
/ 03 июня 2011

Вы можете прикрепить обработчик к событию нажатия кнопки закрытия:

$('.myModal')
    .dialog("widget")
    .find(".ui-dialog-titlebar-close").click(function() {

        // do whatever you want here

    });
0 голосов
/ 09 августа 2013

Я решил это, проверив, что у originalevent есть originalevent типа click. Состояние довольно долгое, но оно работает.

$('.myModal').dialog({
    title: 'dialog 1',
    beforeClose: function(){
        if (e.originalEvent && e.originalEvent.originalEvent && e.originalEvent.originalEvent.type == "click") {
            // do something
        }
    }
}).dialog("open");
...