Как прикрепить обратный вызов к эффекту jquery в диалоговом окне show?

моя проблема в том, что я не знаю, как прикрепить обратный вызов к диалоговому окну jQuery ui.

шоу на самом деле вариант:

$( ".selector" ).dialog({ show: 'slide' });

Я хочу иметь обратный вызов после завершения анимации слайда. Я посмотрел на сами эффекты, и у них есть обратный вызов:

effect( effect, [options], [speed], [callback] )

но в диалоговом окне эффект настроен совсем по-другому. Я попробовал также поставить:

$( ".selector" ).dialog({ show: 'slide', callback: function() {} });

но это не сработало.

предложения?

5 ответов


2015-07-27 обновление для тех, кто использует jQuery v1.10.0 или выше см. этот и другие ответы поскольку мое решение не будет работать с более новыми версиями jQuery.


оригинальный ответ

уже ответил, но так как у меня был ответ, я собираюсь опубликовать его в любом случае...

$('#dialog').dialog({
    show: {
        effect: 'slide',
        complete: function() {
            console.log('animation complete');
        }
    },
    open: function(event, ui) {
        console.log('open');
    }
});

показывает open затем animation complete на консоль


два года спустя предлагаемое решение (@andyb) больше не работает в текущих версиях jQuery UI (в частности, начиная с v1.10.0). Его решение зависело от complete метод обратного вызова - недокументированная функция .

Я придумал современное решение, используя jQuery Promise


Я загрузил пакет jQuery ui dev и узнал, что обратный вызов установлен с "complete":

$( ".selector" ).dialog({ show: 'slide', complete: function() {} });

спасибо всем, кто пытается помочь решить эту проблему:)


попробуйте использовать open событие диалога:

$( ".selector" ).dialog({
   open: function(event, ui) { ... }
});

Я счел необходимым использовать событие" focus:". Я терял правильно выбранную кнопку из-за шоу:. Прекрасные взаимодействия.

focus: function( event, ui ) {
    $(this).siblings('.ui-dialog-buttonpane').find("button:contains('Upload')").focus();
},