diff options
author | Scott González <scott.gonzalez@gmail.com> | 2014-04-01 14:42:38 -0400 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2014-04-01 14:42:38 -0400 |
commit | 0059722b6b43c4985dbbd5f1494524442c12ddb0 (patch) | |
tree | 73d80beaecb0832da98b0ae9fadd5632a425e3ed | |
parent | f3ffc8c9a94da8abe97a32d164f821ad8a9a8b60 (diff) | |
download | jquery-ui-0059722b6b43c4985dbbd5f1494524442c12ddb0.tar.gz jquery-ui-0059722b6b43c4985dbbd5f1494524442c12ddb0.zip |
Button: Properly refresh button sets with new radio buttons
Fixes #8975
Ref gh-888
-rw-r--r-- | tests/unit/button/button.html | 5 | ||||
-rw-r--r-- | tests/unit/button/button_methods.js | 22 | ||||
-rw-r--r-- | ui/button.js | 18 |
3 files changed, 37 insertions, 8 deletions
diff --git a/tests/unit/button/button.html b/tests/unit/button/button.html index e016a06b0..a6ff8fc61 100644 --- a/tests/unit/button/button.html +++ b/tests/unit/button/button.html @@ -40,6 +40,11 @@ <input type="radio" id="radio02" name="radio"><label for="radio02">Choice 2</label> <input type="radio" id="radio03" name="radio"><label for="radio03">Choice 3</label> </div> +<div id="checkbox0"> + <input type="checkbox" id="checkbox01" name="checkbox"><label for="checkbox01">Choice 1</label> + <input type="checkbox" id="checkbox02" name="checkbox"><label for="checkbox02">Choice 2</label> + <input type="checkbox" id="checkbox03" name="checkbox"><label for="checkbox03">Choice 3</label> +</div> <form> <div id="radio1" style="margin-top: 2em;"> <input type="radio" id="radio11" name="radio"><label for="radio11">Choice 1</label> diff --git a/tests/unit/button/button_methods.js b/tests/unit/button/button_methods.js index 467938f00..1c781c87e 100644 --- a/tests/unit/button/button_methods.js +++ b/tests/unit/button/button_methods.js @@ -49,4 +49,26 @@ test( "refresh: Ensure disabled state is preserved correctly.", function() { ok( !element.button( "option", "disabled" ), "Changing a radio button's disabled property should update the state after refresh."); }); +// #8975 +test( "refresh: buttonset should turn added elements into button widgets", function() { + expect( 2 ); + var radioButtonset = $( "#radio0" ).buttonset(), + checkboxButtonset = $( "#checkbox0" ).buttonset(); + + radioButtonset.append( + "<input type='radio' name='radio' id='radio04'>" + + "<label for='radio04'>Choice 4</label>" + ); + checkboxButtonset.append( + "<input type='checkbox' name='checkbox' id='checkbox04'>" + + "<label for='checkbox04'>Choice 4</label>" + ); + + radioButtonset.buttonset( "refresh" ); + checkboxButtonset.buttonset( "refresh" ); + + equal( radioButtonset.find( ":ui-button" ).length, 4, "radio" ); + equal( checkboxButtonset.find( ":ui-button" ).length, 4, "checkbox" ); +}); + })(jQuery); diff --git a/ui/button.js b/ui/button.js index d9b027541..247aba6e5 100644 --- a/ui/button.js +++ b/ui/button.js @@ -366,15 +366,17 @@ $.widget( "ui.buttonset", { }, refresh: function() { - var rtl = this.element.css( "direction" ) === "rtl"; + var rtl = this.element.css( "direction" ) === "rtl", + allButtons = this.element.find( this.options.items ), + existingButtons = allButtons.filter( ":ui-button" ); - this.buttons = this.element.find( this.options.items ) - .filter( ":ui-button" ) - .button( "refresh" ) - .end() - .not( ":ui-button" ) - .button() - .end() + // Initialize new buttons + allButtons.not( ":ui-button" ).button(); + + // Refresh existing buttons + existingButtons.button( "refresh" ); + + this.buttons = allButtons .map(function() { return $( this ).button( "widget" )[ 0 ]; }) |