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

Jquery callbacks вызывается несколько раз

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

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

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

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

4b9b3361

Ответ 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!");
});