]> source.dussan.org Git - jquery-ui.git/commitdiff
Tabs: Prevent default action of clicks even when disabled. Fixes #9413 - Tabs: Disabl...
authorScott González <scott.gonzalez@gmail.com>
Wed, 3 Jul 2013 18:38:35 +0000 (14:38 -0400)
committerScott González <scott.gonzalez@gmail.com>
Wed, 3 Jul 2013 18:38:49 +0000 (14:38 -0400)
tests/unit/tabs/tabs_options.js
ui/jquery.ui.tabs.js

index 51212b8f0651fa2d63638c99c1a652ae710c5da5..a9632481e8f258ab11c629e0009fc4da8b6e5cf8 100644 (file)
@@ -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 );
index 4362421db7c6d88fb056b792e72b8f71ceca6d76..5f81cda10fa75997033f644695af964e4f8efc45 100644 (file)
@@ -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" } );