диалоговое окно jquery не запускается

Я определил свой диалог при загрузке страницы. Я вижу диалог, и пока все в порядке:

dlg1 = $("#modalHolder");
dlg1 = dlg1.dialog({
    width: 300,
    height: 150,
    modal: true,
    autoOpen: false,
    resizable: false,
    closeOnEscape: false,
    draggable: false,
    overlay: {
        backgroundColor: 'red',
        opacity: 0.65
    },
    open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});

Теперь я хотел бы установить событие закрытия динамически, поэтому я попробовал это:

function setCloseFunction(fun)
{
    dlg1.dialog({
        close: function(event, ui)
        {
          alert("2");
          fun();
        }
    });
}

И я называю это так:

setCloseFunction(new Function("alert('1')"));

Однако при закрытии диалогового окна предупреждение никогда не появляется. Любые идеи?


person vikasde    schedule 29.12.2009    source источник
comment
Вы не должны использовать конструктор Function для создания функции. Вместо этого вы должны написать function() { alert('1'); }.   -  person SLaks    schedule 29.12.2009


Ответы (2)


Вы должны написать следующее:

dlg1.bind('dialogclose', function(event, ui) {
    alert("2");
    fun();
});

setCloseFunction(function() { alert('1'); });

EDIT: чтобы удалить функцию, вы можете вызвать unbind('dialogclose').

person SLaks    schedule 29.12.2009

Синтаксис, используемый в setCloseFunction, корректен только при инициализации диалога. Если диалоговое окно уже существует, как в вашем случае, вы обычно меняете такие параметры:

dlg1.dialog('option', optionName, value);

Для таких событий, как close, вы привязываете к нему прослушиватель:

dlg1.bind('dialogclose', function(event, ui) {
  ...
});
person David Hedlund    schedule 29.12.2009
comment
Как мне теперь удалить ту же функцию из dialogClose? - person vikasde; 29.12.2009
comment
Взгляните на функцию unbind: docs.jquery.com/Events/unbind#typefn - person David Hedlund; 29.12.2009