Обратные вызовы JQuery вызывается несколько раз - PullRequest
17 голосов
/ 26 мая 2009

Когда я использую функции fade / slide / animate в jQuery, обратный вызов вызывается несколько раз для каждого элемента, к которому применяется эффект. Это по замыслу конечно. Я просто хочу знать, когда вызывается последний обратный вызов.

Вот то, что я придумал - он затухает все div и отображает предупреждение (), когда срабатывает последний обратный вызов.

$("div").fadeOut(1000, function ()
{
     if ($("div").index($(this)) == $("div").length-1)
          alert("this is the final callback");
});

Есть ли более простой способ проверить, какой обратный вызов является последним, или это единственный способ сделать это?

Ответы [ 3 ]

46 голосов
/ 02 сентября 2011

Попробуйте взглянуть на документацию jQuery для .promise ()

Это должно работать:

$('div').fadeOut(1000).promise().done(function() {
   alert('all done');
});

Как обычно, документация jQuery по этому вопросу очень расплывчата. Но я не уверен, что смогу сделать

18 голосов
/ 26 мая 2009

Это выдаст предупреждение при вызове fadeOut последнего элемента. Это не обязательно будет последним исчезновением.

var numDivs = $('div').length;
$('div').fadeOut(1000, function() {
  if( --numDivs > 0 ) return;
  alert('this is the final fadeout to complete');
});

Проверьте это на JSFiddle

1 голос
/ 26 мая 2009
$("div:not(:last)").fadeOut(1000);
$("div:last").fadeOut(1000, function() {
    alert("Hey!");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...