Skip to content

Commit 4148acf

Browse files
committed
Tabs: Prevent default action of clicks even when disabled. Fixes #9413 - Tabs: Disabled tabs are still clickable.
1 parent 7da8283 commit 4148acf

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

tests/unit/tabs/tabs_options.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,11 @@ test( "{ collapsible: true }", function() {
144144
});
145145

146146
test( "disabled", function() {
147-
expect( 22 );
147+
expect( 23 );
148148

149149
// fully enabled by default
150-
var element = $( "#tabs1" ).tabs();
150+
var event,
151+
element = $( "#tabs1" ).tabs();
151152
disabled( element, false );
152153

153154
ok( !element.tabs( "widget" ).hasClass( "ui-state-disabled" ), "after: wrapper doesn't have ui-state-disabled class" );
@@ -178,6 +179,10 @@ test( "disabled", function() {
178179
ok( !element.tabs( "widget" ).hasClass( "ui-tabs-disabled" ), "after: wrapper doesn't have ui-tabs-disabled class" );
179180
ok( !element.tabs( "widget" ).attr( "aria-disabled" ), "after: wrapper doesn't have aria-disabled attr" );
180181

182+
event = $.Event( "click" );
183+
element.find( ".ui-tabs-anchor" ).eq( 0 ).trigger( event );
184+
ok( event.isDefaultPrevented(), "click is prevented for disabled tab" );
185+
181186
// enable all tabs
182187
element.tabs( "option", "disabled", [] );
183188
disabled( element, false );

ui/jquery.ui.tabs.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,18 +477,20 @@ $.widget( "ui.tabs", {
477477
},
478478

479479
_setupEvents: function( event ) {
480-
var events = {
481-
click: function( event ) {
482-
event.preventDefault();
483-
}
484-
};
480+
var events = {};
485481
if ( event ) {
486482
$.each( event.split(" "), function( index, eventName ) {
487483
events[ eventName ] = "_eventHandler";
488484
});
489485
}
490486

491487
this._off( this.anchors.add( this.tabs ).add( this.panels ) );
488+
// Always prevent the default action, even when disabled
489+
this._on( true, this.anchors, {
490+
click: function( event ) {
491+
event.preventDefault();
492+
}
493+
});
492494
this._on( this.anchors, events );
493495
this._on( this.tabs, { keydown: "_tabKeydown" } );
494496
this._on( this.panels, { keydown: "_panelKeydown" } );

0 commit comments

Comments
 (0)