From 2de31fdbf498a6c20d196a96d007ea0f069644c5 Mon Sep 17 00:00:00 2001 From: TJ VanToll Date: Sun, 7 Apr 2013 12:57:15 -0400 Subject: [PATCH] Button: On form reset only call refresh on current button widgets. Fixed #9213: Button: timeout in formResetHandler causing refresh to be called on non-widgets --- tests/unit/button/button_core.js | 24 ++++++++++++++++++++++++ ui/jquery.ui.button.js | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/unit/button/button_core.js b/tests/unit/button/button_core.js index dbc079818..16c7ca450 100644 --- a/tests/unit/button/button_core.js +++ b/tests/unit/button/button_core.js @@ -153,6 +153,30 @@ test( "#6262 - buttonset not applying ui-corner to invisible elements", function ok( set.find( "label:eq(2)" ).is( ".ui-button.ui-corner-right" ) ); }); +asyncTest( "Resetting a button's form should refresh the visual state of the button widget to match.", function() { + expect( 2 ); + var form = $( "
" + + "" + + "" + + "
" ), + button = form.find( "button" ).button(), + checkbox = form.find( "input[type=checkbox]" ).button(); + + checkbox.prop( "checked", false ).button( "refresh" ); + ok( !checkbox.button( "widget" ).hasClass( "ui-state-active" ) ); + + form.get( 0 ).reset(); + + // #9213: If a button has been removed, refresh should not be called on it when + // its corresponding form is reset. + button.remove(); + + setTimeout(function() { + ok( checkbox.button( "widget" ).hasClass( "ui-state-active" )); + start(); + }); +}); + asyncTest( "#6711 Checkbox/Radiobutton do not Show Focused State when using Keyboard Navigation", function() { expect( 2 ); var check = $( "#check" ).button(), diff --git a/ui/jquery.ui.button.js b/ui/jquery.ui.button.js index 5e64f5164..dd6892275 100644 --- a/ui/jquery.ui.button.js +++ b/ui/jquery.ui.button.js @@ -19,9 +19,9 @@ var lastActive, startXPos, startYPos, clickDragged, stateClasses = "ui-state-hover ui-state-active ", typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", formResetHandler = function() { - var buttons = $( this ).find( ":ui-button" ); + var form = $( this ); setTimeout(function() { - buttons.button( "refresh" ); + form.find( ":ui-button" ).button( "refresh" ); }, 1 ); }, radioGroup = function( radio ) {