Функция сработала перед fadeOut (); закончен - PullRequest
1 голос
/ 13 мая 2010

Я новичок в javascript / jQuery, это действительно поставило меня в тупик.

То, чего я пытаюсь достичь, это

  • При переключении # sameDayTab jquery будет искать .changeAlert и fadeOut его контейнерный div, при повторном переключении div будет появляться (это работает хорошо.)
  • Каждый переключатель также вызывает функцию, которая сообщает мне, сколько .changeAlert'ов присутствует на странице, и соответствующим образом обновляет число в промежутке. Проблема в том, что когда я впервые щелкаю на переключенном якоре, число видимых должно быть 0, так как .changeAlert был скрыт с помощью fadeOut, вместо этого он возвращает количество классов, присутствующих при загрузке страницы, это значение никогда не изменяется независимо от того, сколько раз активирован переключатель .

Любая помощь с благодарностью.

function totalNumFares ()
    {
    var n = $('.changeAlert:visible').size();               
    $('.numFares').replaceWith('<span class=\"numFares\">'+ n +'</span>');

    }

totalNumFares();    

//Toggle On/off Same Day Connections

$('a#sameDayTab').toggle(function() {

    $('.changeAlert').parent().parent().parent().parent().parent().fadeOut();
    totalNumFares();        


    },function(){
    $('.changeAlert').parent().parent().parent().parent().parent().fadeIn();
    totalNumFares();


});

Ответы [ 2 ]

0 голосов
/ 13 мая 2010

Вам нужно запустить его как обратный вызов .fadeOut(), например:

$('.changeAlert').parent().parent().parent().parent().parent().fadeOut(totalNumFares);

В настоящее время он выполняется сразу после того, как он начинает замирания, но :visible пока не завершится , пока не завершится замирания, поэтому для того, чтобы иметь тот счет, который вы хотите, вам нужно обновить его после .fadeOut() завершено, когда выполняется обратный вызов.

Кроме того, вы можете заменить цепочку .parent() одним вызовом .closest(selector), если у вас есть класс для этого родителя, который вы можете использовать в качестве селектора.

0 голосов
/ 13 мая 2010

Вам нужно установить его как обратный вызов:

$(function(){
    // You can set duration to whatever you like
    $("#item").fadeOut(duration, function(){
        totalNumFares();
    });
});

http://api.jquery.com/fadeOut/

...