Skip to content

Commit e19d826

Browse files
committed
Tabs: Properly handle switching from active: false.
1 parent fc52912 commit e19d826

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

tests/unit/tabs/tabs_events.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module( "tabs: events" );
44

55
test( "beforeActivate", function() {
6-
expect( 26 );
6+
expect( 38 );
77

88
var element = $( "#tabs1" ).tabs({
99
// TODO: should be false
@@ -13,7 +13,9 @@ test( "beforeActivate", function() {
1313
tabs = element.find( ".ui-tabs-nav a" ),
1414
panels = element.find( ".ui-tabs-panel" );
1515

16+
// from collapsed
1617
element.one( "tabsbeforeactivate", function( event, ui ) {
18+
ok( !( "originalEvent" in event ) );
1719
equals( ui.oldTab.size(), 0 );
1820
equals( ui.oldPanel.size(), 0 );
1921
equals( ui.newTab.size(), 1 );
@@ -25,7 +27,9 @@ test( "beforeActivate", function() {
2527
element.tabs( "option", "active", 0 );
2628
tabs_state( element, 1, 0, 0 );
2729

30+
// switching tabs
2831
element.one( "tabsbeforeactivate", function( event, ui ) {
32+
equals( event.originalEvent.type, "click" );
2933
equals( ui.oldTab.size(), 1 );
3034
strictEqual( ui.oldTab[ 0 ], tabs[ 0 ] );
3135
equals( ui.oldPanel.size(), 1 );
@@ -36,10 +40,12 @@ test( "beforeActivate", function() {
3640
strictEqual( ui.newPanel[ 0 ], panels[ 1 ] );
3741
tabs_state( element, 1, 0, 0 );
3842
});
39-
element.tabs( "option", "active", 1 );
43+
tabs.eq( 1 ).click();
4044
tabs_state( element, 0, 1, 0 );
4145

46+
// collapsing
4247
element.one( "tabsbeforeactivate", function( event, ui ) {
48+
ok( !( "originalEvent" in event ) );
4349
equals( ui.oldTab.size(), 1 );
4450
strictEqual( ui.oldTab[ 0 ], tabs[ 1 ] );
4551
equals( ui.oldPanel.size(), 1 );
@@ -50,6 +56,21 @@ test( "beforeActivate", function() {
5056
});
5157
element.tabs( "option", "active", false );
5258
tabs_state( element, 0, 0, 0 );
59+
60+
// prevent activation
61+
element.one( "tabsbeforeactivate", function( event, ui ) {
62+
ok( !( "originalEvent" in event ) );
63+
equals( ui.oldTab.size(), 0 );
64+
equals( ui.oldPanel.size(), 0 );
65+
equals( ui.newTab.size(), 1 );
66+
strictEqual( ui.newTab[ 0 ], tabs[ 1 ] );
67+
equals( ui.newPanel.size(), 1 );
68+
strictEqual( ui.newPanel[ 0 ], panels[ 1 ] );
69+
event.preventDefault();
70+
tabs_state( element, 0, 0, 0 );
71+
});
72+
element.tabs( "option", "active", 1 );
73+
tabs_state( element, 0, 0, 0 );
5374
});
5475

5576
test('beforeload', function() {

ui/jquery.ui.tabs.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ $.widget( "ui.tabs", {
364364

365365
options.active = collapsing ? false : that.anchors.index( clicked );
366366

367-
that.active = clicked;
367+
that.active = clickedIsActive ? $() : clicked;
368368
if ( that.xhr ) {
369369
that.xhr.abort();
370370
}
@@ -422,12 +422,12 @@ $.widget( "ui.tabs", {
422422
var active = this._findActive( index )[ 0 ];
423423

424424
// trying to activate the already active panel
425-
if ( this.active && active === this.active[ 0 ] ) {
425+
if ( active === this.active[ 0 ] ) {
426426
return;
427427
}
428428

429429
// trying to collapse, simulate a click on the current active header
430-
active = active || this.active;
430+
active = active || this.active[ 0 ];
431431

432432
this._eventHandler({
433433
target: active,

0 commit comments

Comments
 (0)