Подтвердить что ты не робот

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

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

На самом деле это вариант:

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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


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

Уже ответили, но поскольку у меня был ответ, я все равно отправлю ему сообщение & hellip;

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

Показывает open, за которым следует animation complete в консоли

Ответ 2

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

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

$("#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

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

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

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

Ответ 4

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

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

Ответ 5

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

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