From 8e1ceba717b85e42a13cc1660e7c8e9e9c26c384 Mon Sep 17 00:00:00 2001 From: Cory Gackenheimer Date: Sun, 1 Jan 2012 11:44:22 -0500 Subject: [PATCH] Button: use _hoverable for hover state management. Fixes #5295 - button doesn't remove hover state if they are disabled --- tests/unit/button/button_tickets.js | 11 +++++++++++ ui/jquery.ui.button.js | 7 ++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/unit/button/button_tickets.js b/tests/unit/button/button_tickets.js index eb70181ec05..1e901f9d10c 100644 --- a/tests/unit/button/button_tickets.js +++ b/tests/unit/button/button_tickets.js @@ -5,6 +5,17 @@ module( "button: tickets" ); +test( "#5295 - button does not remove hoverstate if disabled" , function() { + expect( 1 ); + var btn = $("#button").button(); + btn.hover( function() { + btn.button( "disable" ); + }); + btn.trigger( "mouseenter" ); + btn.trigger( "mouseleave" ); + ok( !btn.is( ".ui-state-hover") ); +}); + test( "#5946 - buttonset should ignore buttons that are not :visible", function() { expect( 2 ); $( "#radio01" ).next().andSelf().hide(); diff --git a/ui/jquery.ui.button.js b/ui/jquery.ui.button.js index 6d7b94a38f4..db04b63b8f5 100644 --- a/ui/jquery.ui.button.js +++ b/ui/jquery.ui.button.js @@ -70,13 +70,15 @@ $.widget( "ui.button", { var that = this, options = this.options, toggleButton = this.type === "checkbox" || this.type === "radio", - hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + activeClass = !toggleButton ? "ui-state-active" : "", focusClass = "ui-state-focus"; if ( options.label === null ) { options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); } + this._hoverable( this.buttonElement ); + this.buttonElement .addClass( baseClasses ) .attr( "role", "button" ) @@ -84,7 +86,6 @@ $.widget( "ui.button", { if ( options.disabled ) { return; } - $( this ).addClass( "ui-state-hover" ); if ( this === lastActive ) { $( this ).addClass( "ui-state-active" ); } @@ -93,7 +94,7 @@ $.widget( "ui.button", { if ( options.disabled ) { return; } - $( this ).removeClass( hoverClass ); + $( this ).removeClass( activeClass ); }) .bind( "click" + this.eventNamespace, function( event ) { if ( options.disabled ) {