From: Scott González Date: Tue, 29 Jul 2014 14:40:02 +0000 (-0400) Subject: Selectmenu: Properly set width for button X-Git-Tag: 1.11.1~29 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=45e13ed208b3533e91d008789d61e5138501428a;p=jquery-ui.git Selectmenu: Properly set width for button Fixes #10145 Closes gh-1296 --- diff --git a/tests/unit/selectmenu/selectmenu_options.js b/tests/unit/selectmenu/selectmenu_options.js index 25448fd40..ae847f5e1 100644 --- a/tests/unit/selectmenu/selectmenu_options.js +++ b/tests/unit/selectmenu/selectmenu_options.js @@ -86,8 +86,8 @@ test( "CSS styles", function() { }); -test( "Width", function() { - expect( 8 ); +test( "width", function() { + expect( 9 ); var button, menu, element = $( "#speed" ); @@ -124,6 +124,14 @@ test( "Width", function() { equal( button.outerWidth(), element.outerWidth(), "button width with long option" ); element.selectmenu( "open" ); ok( menu.outerWidth() >= element.outerWidth(), "menu width with long option" ); + + element.parent().outerWidth( 300 ); + element + .selectmenu( "destroy" ) + .css( "width", "100%" ) + .selectmenu(); + button = element.selectmenu( "widget" ); + equal( button.outerWidth(), 300, "button width fills container" ); }); })( jQuery ); diff --git a/ui/selectmenu.js b/ui/selectmenu.js index 2107285fe..0b47feb53 100644 --- a/ui/selectmenu.js +++ b/ui/selectmenu.js @@ -106,7 +106,7 @@ return $.widget( "ui.selectmenu", { .appendTo( this.button ); this._setText( this.buttonText, this.element.find( "option:selected" ).text() ); - this._setOption( "width", this.options.width ); + this._resizeButton(); this._on( this.button, this._buttonEvents ); this.button.one( "focusin", function() { @@ -186,7 +186,9 @@ return $.widget( "ui.selectmenu", { refresh: function() { this._refreshMenu(); this._setText( this.buttonText, this._getSelectedItem().text() ); - this._setOption( "width", this.options.width ); + if ( !this.options.width ) { + this._resizeButton(); + } }, _refreshMenu: function() { @@ -475,10 +477,7 @@ return $.widget( "ui.selectmenu", { } if ( key === "width" ) { - if ( !value ) { - value = this.element.outerWidth(); - } - this.button.outerWidth( value ); + this._resizeButton(); } }, @@ -511,6 +510,17 @@ return $.widget( "ui.selectmenu", { this.menu.attr( "aria-hidden", !this.isOpen ); }, + _resizeButton: function() { + var width = this.options.width; + + if ( !width ) { + width = this.element.show().outerWidth(); + this.element.hide(); + } + + this.button.outerWidth( width ); + }, + _resizeMenu: function() { this.menu.outerWidth( Math.max( this.button.outerWidth(),