JQuery UI диалог - проблема с событием при закрытии - PullRequest
1 голос
/ 15 мая 2009

Я пытаюсь выполнить определенное действие, когда закрываю диалоговое окно jQuery UI. Вот упрощенная версия моего кода:

$('a.open-trigger').click(function(){
    var test = 'hello';

    $('#dialog').dialog({
        bgiframe: true,
        dialogClass: 'change', 
        resizable: false,
        draggable: false,
        modal: true,
        height: 334, 
        width: 450,
        autoOpen: false,
        show: 'fade'
    });

    $('#dialog').dialog('open');

    $('a.close-trigger').click(function(){
        alert(test);
        $('#dialog').dialog('close');
    });
});

В первый раз, когда я закрываю диалог, я получаю ожидаемое предупреждение со словом "привет". Если я открою диалоговое окно во второй раз и закрою его, я получу предупреждение "Здравствуй" дважды. Если я открою и закрою его в третий раз, я получу три предупреждения и так далее.

Почему эти оповещения дублируются? Я хотел бы, чтобы оповещение появлялось только один раз при закрытии, независимо от того, сколько раз я открывал / закрывал диалоговое окно.

Спасибо! Simon

Ответы [ 3 ]

8 голосов
/ 15 мая 2009

Вы подключаете дополнительные обработчики событий каждый раз, когда вызываете .click. Вот почему это дублирует.

$('a.close-trigger').click(function(){
                    alert(test);
                    $('#dialog').dialog('close');
            });

Извлеките этот код на тот же уровень, что и для других привязок событий, и он должен работать как положено.

0 голосов
/ 15 мая 2009

Вам нужно удалить обработчик события закрытия клика из обработчика события открытия клика

$(function() {
    $('#dialog').dialog({bgiframe: true, dialogClass: 'change', resizable: false, draggable: false, modal: true, height: 334, width: 450, autoOpen: false, show: 'fade'});

    $('a.open-trigger').click(function(){    
        $('#dialog').dialog('open');
    });


    $('a.close-trigger').click(function(){
        alert("hello");
        var myDialog = $('#dialog');
        if (myDialog.dialog('isOpen'))
            myDialog.dialog('close');
    });
});
0 голосов
/ 15 мая 2009

Вы связали функцию с кнопкой открытия, которая добавляет обработчик событий к кнопке закрытия при каждом запуске события открытия. Вы должны добавить свой обработчик события close где-нибудь вне функции события 'a.open-trigger' ...

$('a.open-trigger').click(function(){
        var test = 'hello';

        $('#dialog').dialog({bgiframe: true, dialogClass: 'change', resizable: false, draggable: false, modal: true, height: 334, width: 450, autoOpen: false, show: 'fade'});
        $('#dialog').dialog('open');
});

$('a.close-trigger').click(function(){
        alert(test);
        $('#dialog').dialog('close');
});
...