You're right, that will run the callback once for each element. This
is a bit hacky but is the shortest way I could think of:

function closeMainPanels(){
    jQuery("div.mainLiner div.panel").not(':last').slideUp(750).end()
    .filter(':last').slideUp(750, function(){
            //callback
    })
};

On Jan 2, 1:15 am, "Cam Spiers" <camspi...@gmail.com> wrote:
> They are all sliding up at the same time, but I was under the impression
> that your code would call the callback function once for each div.panel that
> was found. Am I mistaken?
> (would be really awesome if it does only call once)
>
> And if I'm not, I reiterate that I only want the callback function called
> once, and it needs to be called after all of the panels have finished
> animation.
>
> The reason for this is that I am doing a ajax PUT form submission that
> updates a Members account and then returns the updated DOM section. Then I
> replace the old DOM section with the new piece after all of the open panels
> (which display the content which is about to be replaced) are closed.
>
> Cheers.
>
> On Fri, Jan 2, 2009 at 2:43 PM, Ricardo Tomasi <ricardob...@gmail.com>wrote:
>
>
>
> > If they are all sliding up at the same time, isn't it simpler to use
>
> > function closeMainPanels(){
> >    jQuery("div.mainLiner div.panel").slideUp(750, function(){ /
> > *...callback...*/ });
> > }
>
> > On Jan 1, 5:53 pm, "Cam Spiers" <camspi...@gmail.com> wrote:
> > > function closeMainPanels(callback){
> > >     var panels = jQuery('div.mainLiner div.panel');
> > >     var done = [];
> > >     var length = panels.length;
> > >     panels.each(function(){
> > >         var panel = jQuery(this);
> > >         panel.slideUp(750, function(){
> > >             if (done.push(panel) == length){
> > >                 callback();
> > >             }
> > >         });
> > >     });
>
> > > }
>
> > > This is what I ended up using thanks brian. :)
>
> > > Cheers,
> > > Cam
>
> > > On Thu, Jan 1, 2009 at 5:26 PM, Cam Spiers <camspi...@gmail.com> wrote:
> > > > Hey,
>
> > > > function closeMainPanels(){
> > > >     jQuery("div.mainLiner div.panel").each(function(){
> > > >         jQuery(this).slideUp(750);
> > > >     });
> > > > }
>
> > > > How can I tell when all panels have finished animation?
>
> > > > As I need to call another function when all have finished.
>
> > > > Cheers,
> > > > Cam

Reply via email to