Почему это произошло, правда? Я имею в виду, похоже, что вы запускаете анимацию одновременно (в конце концов, есть только один вызов .fadeOut
, верно?). Я думаю, это потому, что $ () возвращает массив, и когда вы вызываете .fadeOut
, jQuery выполняет итерацию по массиву и выполняет все, что выполняет для каждого из его элементов. Начиная с первого. Поскольку обратный вызов «привязывается» к каждой анимации, вы видите видимый эффект первого обратного вызова.
Полагаю, вы могли бы обойти это, самостоятельно пройдясь по массиву возвращаемых элементов и убедившись, что обратный вызов прикреплен только к последнему.
$('#edit-button').click(function(){
var display_elements = $('.display-element');
var len = display_elements.length;
for (var i = 0; i < len-1; i++) {
$(display_elements[i]).fadeOut(300); // no callback
}
$(display_elements[len-1]).fadeOut(300, function() {
$('.edit-element').fadeIn(300);
}); // last element - attach callback
});
Извините, если код выключен, я должен признать, что мой javascript-fu не очень силен:)