2011-05-28 29 views
0

调用toggle需要很长时间才能加载,所以我试图在加载时添加加载img,但在.showall已激活时似乎无法加载,请查看*在下面的代码jquery切换(事件,事件)隐藏显示问题

$('#loading').hide(); 

$(".showall").toggle(
function(){ 
    $('#loading').show(1); // * added 
    $(".toggle_container").slideDown(); 
    $('#loading').hide(); // * added 
    }, 
function() { 
    $('#loading').show(1); // * added 
    $(".toggle_container").slideUp(); 
    $('#loading').hide(); // * added 
} 
); 
+0

你可以提供jsfiddle吗?另外,显示#加载后,您立即将其隐藏,以免看到它。 – pepkin88 2011-05-28 16:59:52

回答

0

我承认,使用显示/隐藏有或没有参数时发生了奇怪的事情。这个版本可以工作,但我不知道为什么这些没有参数的方法不能像他们应该那样工作。

代码:(http://jsfiddle.net/z3HRQ/2/

$('#loading').hide(1); 

$('.showall').toggle(
    function() { 
     $('#loading').show(1); 
     $('.toggle_container').slideUp(function() { 
      $('#loading').hide(); 
     }); 
    }, 
    function() { 
     $('#loading').show(1); 
     $('.toggle_container').slideDown(function() { 
      $('#loading').hide(); 
     }); 
    } 
); 
+0

谢谢你们, 当

*is busy
是做同样的事情,这是我遇到的问题.. – jack 2011-05-29 11:45:20

1

回调调用隐藏的另一反应是正确的做法,但我想我会回答指出原因。

这里实际上有很多问题。您的意图是显示#loading,然后slideup,一旦完成,请隐藏#loading。但是,当调用slideup时,动画会排队并且代码继续运行,代码不会等待slideup完成,然后继续前进到下一行。这就是为什么您需要使用回拨,在slideup完成后致电hide

另一件事,很多人忽略的是showhide当与持续时间称为是动画,因此队列,但是,当没有时间传递这些调用没有动画,也不会排队。因此,拨打电话show并持续一段时间,然后立即拨打hide并且没有持续时间将永远不会显示该元素。看到这个例子:http://jsfiddle.net/zZHhm/注意你永远不会看到DIV2。

此外,持续时间传递给showhide以毫秒为单位,所以hide(1)得到1毫秒(你可能会意识到这一点)的持续时间。