2010-05-12 70 views
1

我是新来的JavaScript/jQuery这真的让我难住。函数在fadeOut()之前触发;完成

我想在这里实现的是

  • 在切换一个#sameDayTab jQuery将寻找.changeAlert和淡出它的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 2010-05-12 21:08:13

+0

@chibineku - 当你使用一个函数作为回调函数时,你只传递名字,这会传递函数,见下面的例子我的答案......当你在上面加上括号时,你实际上是调用函数和*传递*结果,这不是你想要99%的回调时间。 – 2010-05-12 21:15:44

回答

0

你需要运行它作为.fadeOut()回调,像这样的:目前

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

它在开始后立即执行褪色,但是它的:visible直到它完成褪色,所以要计算你想要的,你需要在.fadeOut()完成之后更新它,这是回调运行的时间。

另外,如果您有一个可以用作选择器的父类的类,那么您可能会用单个.closest(selector)调用替换该.parent()链。

+0

完美地工作。一般来说,我仍然用jQuery和JavaScript来发现自己的脚。感谢下一次我知道的解释。 – willmcneilly 2010-05-12 21:10:37

0

您需要将其设置为回调:

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

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

+0

感谢您的帮助,这是一种享受。 – willmcneilly 2010-05-12 21:11:07

相关问题