From: Oleg Date: Tue, 14 Jan 2014 22:26:56 +0000 (+0400) Subject: Attrs: Force reflow in select value setter X-Git-Tag: 1.11.0-rc1~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fpull%2F1485%2Fhead;p=jquery.git Attrs: Force reflow in select value setter When new option element is added to select box we need to force reflow of newly added node in order to workaround delay of initialization props. try...catch statment is required for bug isolation Fixes #2252 --- diff --git a/src/attributes/val.js b/src/attributes/val.js index 16296a631..b01eebff7 100644 --- a/src/attributes/val.js +++ b/src/attributes/val.js @@ -118,21 +118,37 @@ jQuery.extend({ set: function( elem, value ) { var optionSet, option, options = elem.options, - values = jQuery.makeArray( value ), i = options.length; while ( i-- ) { option = options[ i ]; - if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { - optionSet = true; + + if ( jQuery.valHooks.option.get( option ) === value ) { + + // Support: IE6 + // When new option element is added to select box we need to + // force reflow of newly added node in order to workaround delay + // of initialization properties + try { + option.selected = optionSet = true; + + } catch ( _ ) { + + // Will be executed only in IE6 + option.scrollHeight; + } + + } else { + option.selected = false; } } - // force browsers to behave consistently when non-matching value is set + // Force browsers to behave consistently when non-matching value is set if ( !optionSet ) { elem.selectedIndex = -1; } - return values; + + return options; } } }