Как прикрепить обратный вызов к эффекту jquery в диалоговом окне? - PullRequest
25 голосов
/ 03 августа 2011

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

На самом деле это опция выбора:

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

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

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

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

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

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

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

Ответы [ 5 ]

39 голосов
/ 03 августа 2011

Обновление 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 в консоли

32 голосов
/ 15 августа 2013

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

Я нашел современное решение с использованием jQuery Promise object:

$("#dialog").dialog({
    show: {
        effect: "drop",
        direction: "up",
        duration: 1000
    },
    hide: {
        effect: "drop",
        direction: "down",
        duration: 1000
    },
    open: function () {
        $(this).parent().promise().done(function () {
            console.log("[#Dialog] Opened");
        });
    },
    close: function () {
        $(this).parent().promise().done(function () {
            console.log("[#Dialog] Closed");
        });
    }
});

Вот обычная демонстрация JSFiddle: http://jsfiddle.net/losnir/jcmpm/

3 голосов
/ 03 августа 2011

Я скачал пакет jquery ui dev и обнаружил, что для обратного вызова задано «complete»:

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

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

1 голос
/ 03 августа 2011

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

$( ".selector" ).dialog({
   open: function(event, ui) { ... }
});
0 голосов
/ 18 августа 2015

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

focus: function( event, ui ) {
    $(this).siblings('.ui-dialog-buttonpane').find("button:contains('Upload')").focus();
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...