Skip to content

Commit 8def77c

Browse files
tjvantolljzaefferer
authored andcommitted
Button: Fixing handling of the disabled options on refresh method calls. Fixed #8828 - Button: Refresh does not re-enable disabled button.
(cherry picked from commit 93abe02)
1 parent 188259e commit 8def77c

File tree

3 files changed

+39
-9
lines changed

3 files changed

+39
-9
lines changed

tests/unit/button/button_methods.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,40 @@ test("destroy", function() {
1313
});
1414
});
1515

16+
test( "refresh: Ensure disabled state is preserved correctly.", function() {
17+
expect( 8 );
18+
19+
var element = $( "<a href='#'></a>" );
20+
element.button({ disabled: true }).button( "refresh" );
21+
ok( element.button( "option", "disabled" ), "Anchor button should remain disabled after refresh" ); //See #8237
22+
23+
element = $( "<div></div>" );
24+
element.button({ disabled: true }).button( "refresh" );
25+
ok( element.button( "option", "disabled" ), "<div> buttons should remain disabled after refresh" );
26+
27+
element = $( "<button></button>" );
28+
element.button( { disabled: true} ).button( "refresh" );
29+
ok( element.button( "option", "disabled" ), "<button> should remain disabled after refresh");
30+
31+
element = $( "<input type='checkbox'>" );
32+
element.button( { disabled: true} ).button( "refresh" );
33+
ok( element.button( "option", "disabled" ), "Checkboxes should remain disabled after refresh");
34+
35+
element = $( "<input type='radio'>" );
36+
element.button( { disabled: true} ).button( "refresh" );
37+
ok( element.button( "option", "disabled" ), "Radio buttons should remain disabled after refresh");
38+
39+
element = $( "<button></button>" );
40+
element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
41+
ok( !element.button( "option", "disabled" ), "Changing a <button>'s disabled property should update the state after refresh."); //See #8828
42+
43+
element = $( "<input type='checkbox'>" );
44+
element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
45+
ok( !element.button( "option", "disabled" ), "Changing a checkbox's disabled property should update the state after refresh.");
46+
47+
element = $( "<input type='radio'>" );
48+
element.button( { disabled: true} ).prop( "disabled", false ).button( "refresh" );
49+
ok( !element.button( "option", "disabled" ), "Changing a radio button's disabled property should update the state after refresh.");
50+
});
51+
1652
})(jQuery);

tests/unit/button/button_tickets.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,4 @@ test( "#7534 - Button label selector works for ids with \":\"", function() {
7272
ok( group.find( "label" ).is( ".ui-button" ), "Found an id with a :" );
7373
});
7474

75-
test( "#8237 - Anchor tags lose disabled state when refreshed", function() {
76-
expect( 1 );
77-
var element = $( "<a id='a8237'></a>" ).appendTo( "#qunit-fixture" );
78-
79-
element.button({ disabled: true }).button( "refresh" );
80-
ok( element.button( "option", "disabled" ), "Anchor button should remain disabled after refresh" );
81-
});
82-
8375
})( jQuery );

ui/jquery.ui.button.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,9 @@ $.widget( "ui.button", {
283283
},
284284

285285
refresh: function() {
286-
var isDisabled = this.element.is( ":disabled" ) || this.element.hasClass( "ui-button-disabled" );
286+
//See #8237 & #8828
287+
var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
288+
287289
if ( isDisabled !== this.options.disabled ) {
288290
this._setOption( "disabled", isDisabled );
289291
}

0 commit comments

Comments
 (0)