From f6e7b6c9f6b49e4c7ab648bd617fe724ce0fb417 Mon Sep 17 00:00:00 2001 From: David Petersen Date: Sat, 26 Mar 2011 20:49:59 -0400 Subject: [PATCH] Use this.running to know if we are still in process of showing/hidding a tab --- ui/jquery.ui.tabs.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 14c74b110..0157a3329 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -44,6 +44,8 @@ $.widget( "ui.tabs", { var self = this, o = this.options; + this.running = false; + this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); this._processTabs(); @@ -294,9 +296,11 @@ $.widget( "ui.tabs", { $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); if ( this.showFx ) { + self.running = true; show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way .animate( showFx, showFx.duration || "normal", function() { self._resetStyle( show, showFx ); + self.running = false; self._trigger( "show", event, self._ui( clicked, show[ 0 ] ) ); }); } else { @@ -309,7 +313,9 @@ $.widget( "ui.tabs", { var self = this; if ( this.hideFx ) { + self.running = true; $hide.animate( hideFx, hideFx.duration || "normal", function() { + self.running = false; self.lis.removeClass( "ui-tabs-selected ui-state-active" ); $hide.addClass( "ui-tabs-hide" ); self._resetStyle( $hide, hideFx ); @@ -346,14 +352,15 @@ $.widget( "ui.tabs", { $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), $show = self.element.find( self._sanitizeSelector( el.hash ) ); - // If tab is already selected and not collapsible or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || + // tab is already selected, but not collapsible + if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible ) || + // can't switch durning an animation + self.running || + // tab is disabled $li.hasClass( "ui-state-disabled" ) || + // tab is already loading $li.hasClass( "ui-state-processing" ) || - self.panels.filter( ":animated" ).length || + // allow canceling by select event self._trigger( "select", event, self._ui( el, $show[ 0 ] ) ) === false ) { el.blur(); return; -- 2.39.5