From 4148acfa9a7b1494f2d87559362c07a59f8e47f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Wed, 3 Jul 2013 14:38:35 -0400 Subject: [PATCH] Tabs: Prevent default action of clicks even when disabled. Fixes #9413 - Tabs: Disabled tabs are still clickable. --- tests/unit/tabs/tabs_options.js | 9 +++++++-- ui/jquery.ui.tabs.js | 12 +++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index 51212b8f0..a9632481e 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -144,10 +144,11 @@ test( "{ collapsible: true }", function() { }); test( "disabled", function() { - expect( 22 ); + expect( 23 ); // fully enabled by default - var element = $( "#tabs1" ).tabs(); + var event, + element = $( "#tabs1" ).tabs(); disabled( element, false ); ok( !element.tabs( "widget" ).hasClass( "ui-state-disabled" ), "after: wrapper doesn't have ui-state-disabled class" ); @@ -178,6 +179,10 @@ test( "disabled", function() { ok( !element.tabs( "widget" ).hasClass( "ui-tabs-disabled" ), "after: wrapper doesn't have ui-tabs-disabled class" ); ok( !element.tabs( "widget" ).attr( "aria-disabled" ), "after: wrapper doesn't have aria-disabled attr" ); + event = $.Event( "click" ); + element.find( ".ui-tabs-anchor" ).eq( 0 ).trigger( event ); + ok( event.isDefaultPrevented(), "click is prevented for disabled tab" ); + // enable all tabs element.tabs( "option", "disabled", [] ); disabled( element, false ); diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 4362421db..5f81cda10 100644 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -477,11 +477,7 @@ $.widget( "ui.tabs", { }, _setupEvents: function( event ) { - var events = { - click: function( event ) { - event.preventDefault(); - } - }; + var events = {}; if ( event ) { $.each( event.split(" "), function( index, eventName ) { events[ eventName ] = "_eventHandler"; @@ -489,6 +485,12 @@ $.widget( "ui.tabs", { } this._off( this.anchors.add( this.tabs ).add( this.panels ) ); + // Always prevent the default action, even when disabled + this._on( true, this.anchors, { + click: function( event ) { + event.preventDefault(); + } + }); this._on( this.anchors, events ); this._on( this.tabs, { keydown: "_tabKeydown" } ); this._on( this.panels, { keydown: "_panelKeydown" } ); -- 2.39.5