From 9fe051d57ea1dbe3697be32a4f21b08cbeb7d31f Mon Sep 17 00:00:00 2001 From: Oleg Date: Wed, 15 Jan 2014 02:26:56 +0400 Subject: [PATCH] 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 --- src/attributes/val.js | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) 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; } } } -- 2.39.5