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

Функция jquery на toggleClass завершена?

Как я могу выполнить функцию после завершения команды toggleClass? Я пробовал следующее, но не повезло:

$("#loader").toggleClass('fadeOut', function () {
    alert('a');
});
4b9b3361

Ответ 1

В jQuery есть метод обещаний, который возвращает отложенный объект, к которому вы можете получить доступ, используя .promise(). Этот объект обещания будет разрешен после завершения всех анимаций на выбранных элементах. В этот момент вы можете привязать к этому метод.

$("#loader").toggleClass('fadeOut',600).promise().done(function(){
    alert('a');
});

http://jsfiddle.net/skram/4x76J/

Ответ 2

toggleClass выполняется немедленно, поэтому вам не нужен обратный вызов для toggleClass, просто поместите alert('a') в следующую строку, которая будет оповещаться после выполнения toggleClass.

Изменить: Похоже, вы хотите jQuery UI Effects - toggleClass, который, к сожалению, не имеет функции обратного вызова.

Вероятно, вы должны написать свою собственную функцию переключения. См. Ниже для переключения fadeIn/fadeOut,

var $loader = $("#loader");
if ($loader.is(':visible')) {
  $loader.fadeOut(100, function () {
      alert('fade out complete');
  });
} else {
  $loader.fadeIn(100, function () {
      alert('fadeIn complete');
  });
}

Ответ 3

    $("#loader").stop().fadeTo(400,0, function() {
        $(this).toggleClass('fadeOut').hide(); // exec after is faded out.
        alert(' ta-da!');
    });

Ответ 4

Я использовал другой метод для решения этой проблемы. В этом примере я объединил функцию .delay() и .queue()

$(this).toggleClass("focus_out").delay(500).queue(function(custom_call_back) {
    $(this).removeClass('focus_out');
    custom_call_back();
});

В вашей ситуации $(this) может быть $('#loader')

jQuery: . delay(); queue();