2010-05-12 3 views
1

Я новичок в javascript/jQuery, это действительно меня озадачивает.Функция Запущена перед fadeOut(); закончен

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

  • На переключаясь на # 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(); 


}); 
+0

Возможно, я ошибаюсь, но я помню, что существует разница, если вы вызываете функцию с круглыми скобками и без них, относительно того, как сразу это называется, - это что, балони? – user97410

+0

@chibineku - Когда вы используете функцию как обратный вызов, вы передаете только имя, это передает функцию, см. Мой ответ ниже для примера ... когда вы помещаете в него скобки, вы на самом деле * вызываете * функцию и * прохождение * результата, который не является тем, что вы хотите в 99% случаев с обратными вызовами. –

ответ

0

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

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

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

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

+0

Работает отлично. Все еще нахожу свои ноги с jQuery и javascript в целом. Спасибо за объяснение, которое я знаю в следующий раз. – willmcneilly

0

Вы должны установить его в качестве обратного вызова:

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

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

+0

Спасибо, что обратилась за помощью. – willmcneilly