Jquery callbacks вызывается несколько раз
Когда я использую функции fade/slide/animate в jQuery, обратный вызов вызывается несколько раз для каждого элемента, к которому применяется эффект. Это, конечно, дизайн. Я просто хочу знать, когда вызывается последний обратный вызов.
Вот что я придумал - он исчезает во всех div и отображает предупреждение() при запуске последнего обратного вызова.
$("div").fadeOut(1000, function ()
{
if ($("div").index($(this)) == $("div").length-1)
alert("this is the final callback");
});
Есть ли более простой способ проверить, какой обратный вызов является последним, или это единственный способ сделать это?
Ответы
Ответ 1
Это приведет к появлению предупреждения, когда вызывается fadeOut на последнем элементе. Это не обязательно будет последним fadeOut.
var numDivs = $('div').length;
$('div').fadeOut(1000, function() {
if( --numDivs > 0 ) return;
alert('this is the final fadeout to complete');
});
Проверьте это на JSFiddle
Ответ 2
Попробуйте взглянуть на документацию jQuery для .promise()
Это должно работать:
$('div').fadeOut(1000).promise().done(function() {
alert('all done');
});
Как обычно, документация jQuery на этом действительно расплывчата. Но я не уверен, что смогу сделать
Ответ 3
$("div:not(:last)").fadeOut(1000);
$("div:last").fadeOut(1000, function() {
alert("Hey!");
});