@@ -44,6 +44,8 @@ $.widget( "ui.tabs", {
44
44
var self = this ,
45
45
o = this . options ;
46
46
47
+ this . running = false ;
48
+
47
49
this . element . addClass ( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) ;
48
50
49
51
this . _processTabs ( ) ;
@@ -294,9 +296,11 @@ $.widget( "ui.tabs", {
294
296
$ ( clicked ) . closest ( "li" ) . addClass ( "ui-tabs-selected ui-state-active" ) ;
295
297
296
298
if ( this . showFx ) {
299
+ self . running = true ;
297
300
show . hide ( ) . removeClass ( "ui-tabs-hide" ) // avoid flicker that way
298
301
. animate ( showFx , showFx . duration || "normal" , function ( ) {
299
302
self . _resetStyle ( show , showFx ) ;
303
+ self . running = false ;
300
304
self . _trigger ( "show" , event , self . _ui ( clicked , show [ 0 ] ) ) ;
301
305
} ) ;
302
306
} else {
@@ -309,7 +313,9 @@ $.widget( "ui.tabs", {
309
313
var self = this ;
310
314
311
315
if ( this . hideFx ) {
316
+ self . running = true ;
312
317
$hide . animate ( hideFx , hideFx . duration || "normal" , function ( ) {
318
+ self . running = false ;
313
319
self . lis . removeClass ( "ui-tabs-selected ui-state-active" ) ;
314
320
$hide . addClass ( "ui-tabs-hide" ) ;
315
321
self . _resetStyle ( $hide , hideFx ) ;
@@ -346,14 +352,15 @@ $.widget( "ui.tabs", {
346
352
$hide = self . panels . filter ( ":not(.ui-tabs-hide)" ) ,
347
353
$show = self . element . find ( self . _sanitizeSelector ( el . hash ) ) ;
348
354
349
- // If tab is already selected and not collapsible or tab disabled or
350
- // or is already loading or click callback returns false stop here.
351
- // Check if click handler returns false last so that it is not executed
352
- // for a disabled or loading tab!
353
- if ( ( $li . hasClass ( "ui-tabs-selected" ) && ! o . collapsible ) ||
355
+ // tab is already selected, but not collapsible
356
+ if ( ( $li . hasClass ( "ui-tabs-selected" ) && ! o . collapsible ) ||
357
+ // can't switch durning an animation
358
+ self . running ||
359
+ // tab is disabled
354
360
$li . hasClass ( "ui-state-disabled" ) ||
361
+ // tab is already loading
355
362
$li . hasClass ( "ui-state-processing" ) ||
356
- self . panels . filter ( ":animated" ) . length ||
363
+ // allow canceling by select event
357
364
self . _trigger ( "select" , event , self . _ui ( el , $show [ 0 ] ) ) === false ) {
358
365
el . blur ( ) ;
359
366
return ;
0 commit comments