aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTJ VanToll <tj.vantoll@gmail.com>2012-11-19 15:42:28 -0500
committerMike Sherov <mike.sherov@gmail.com>2012-11-21 19:24:24 -0500
commit93abe02b6052143fac30393291da3fc254bde996 (patch)
treea74a4d77933f392f6116a21d47594291ad3fbc50
parentcb748b4a6f32aa5748d6777e7871c96f70ad2207 (diff)
downloadjquery-ui-93abe02b6052143fac30393291da3fc254bde996.tar.gz
jquery-ui-93abe02b6052143fac30393291da3fc254bde996.zip
Button: Fixing handling of the disabled options on refresh method calls. Fixed #8828 - Button: Refresh does not re-enable disabled button.
-rw-r--r--tests/unit/button/button_methods.js36
-rw-r--r--tests/unit/button/button_tickets.js8
-rw-r--r--ui/jquery.ui.button.js4
3 files changed, 39 insertions, 9 deletions
diff --git a/tests/unit/button/button_methods.js b/tests/unit/button/button_methods.js
index 6a305d654..c53444005 100644
--- a/tests/unit/button/button_methods.js
+++ b/tests/unit/button/button_methods.js
@@ -13,4 +13,40 @@ test("destroy", function() {
});
});
+test( "refresh: Ensure disabled state is preserved correctly.", function() {
+ expect( 8 );
+
+ var element = $( "<a href='#'></a>" );
+ element.button({ disabled: true }).button( "refresh" );
+ ok( element.button( "option", "disabled" ), "Anchor button should remain disabled after refresh" ); //See #8237
+
+ element = $( "<div></div>" );
+ element.button({ disabled: true }).button( "refresh" );
+ ok( element.button( "option", "disabled" ), "<div> buttons should remain disabled after refresh" );
+
+ element = $( "<button></button>" );
+ element.button( { disabled: true} ).button( "refresh" );
+ ok( element.button( "option", "disabled" ), "<button> should remain disabled after refresh");
+
+ element = $( "<input type='checkbox'>" );
+ element.button( { disabled: true} ).button( "refresh" );
+ ok( element.button( "option", "disabled" ), "Checkboxes should remain disabled after refresh");
+
+ element = $( "<input type='radio'>" );
+ element.button( { disabled: true} ).button( "refresh" );
+ ok( element.button( "option", "disabled" ), "Radio buttons should remain disabled after refresh");
+
+ element = $( "<button></button>" );
+ element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
+ ok( !element.button( "option", "disabled" ), "Changing a <button>'s disabled property should update the state after refresh."); //See #8828
+
+ element = $( "<input type='checkbox'>" );
+ element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
+ ok( !element.button( "option", "disabled" ), "Changing a checkbox's disabled property should update the state after refresh.");
+
+ element = $( "<input type='radio'>" );
+ element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
+ ok( !element.button( "option", "disabled" ), "Changing a radio button's disabled property should update the state after refresh.");
+});
+
})(jQuery);
diff --git a/tests/unit/button/button_tickets.js b/tests/unit/button/button_tickets.js
index 1e901f9d1..1272d368f 100644
--- a/tests/unit/button/button_tickets.js
+++ b/tests/unit/button/button_tickets.js
@@ -72,12 +72,4 @@ test( "#7534 - Button label selector works for ids with \":\"", function() {
ok( group.find( "label" ).is( ".ui-button" ), "Found an id with a :" );
});
-test( "#8237 - Anchor tags lose disabled state when refreshed", function() {
- expect( 1 );
- var element = $( "<a id='a8237'></a>" ).appendTo( "#qunit-fixture" );
-
- element.button({ disabled: true }).button( "refresh" );
- ok( element.button( "option", "disabled" ), "Anchor button should remain disabled after refresh" );
-});
-
})( jQuery );
diff --git a/ui/jquery.ui.button.js b/ui/jquery.ui.button.js
index 3decc2331..b80fca4d9 100644
--- a/ui/jquery.ui.button.js
+++ b/ui/jquery.ui.button.js
@@ -284,7 +284,9 @@ $.widget( "ui.button", {
},
refresh: function() {
- var isDisabled = this.element.is( ":disabled" ) || this.element.hasClass( "ui-button-disabled" );
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
if ( isDisabled !== this.options.disabled ) {
this._setOption( "disabled", isDisabled );
}