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
This commit is contained in:
Oleg 2014-01-15 02:26:56 +04:00
parent 92cbf5362c
commit 9fe051d57e

View File

@ -118,21 +118,37 @@ jQuery.extend({
set: function( elem, value ) { set: function( elem, value ) {
var optionSet, option, var optionSet, option,
options = elem.options, options = elem.options,
values = jQuery.makeArray( value ),
i = options.length; i = options.length;
while ( i-- ) { while ( i-- ) {
option = options[ 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 ) { if ( !optionSet ) {
elem.selectedIndex = -1; elem.selectedIndex = -1;
} }
return values;
return options;
} }
} }
} }