mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Attributes: fix setting selected on an option in IE<=11
Fixes gh-2732 Close gh-2840
This commit is contained in:
parent
63317eb474
commit
b18894720a
@ -100,8 +100,11 @@ if ( !support.hrefNormalized ) {
|
||||
}
|
||||
|
||||
// Support: Safari, IE9+
|
||||
// mis-reports the default selected property of an option
|
||||
// Accessing the parent's selectedIndex property fixes it
|
||||
// Accessing the selectedIndex property
|
||||
// forces the browser to respect setting selected
|
||||
// on the option
|
||||
// The getter ensures a default option is selected
|
||||
// when in an optgroup
|
||||
if ( !support.optSelected ) {
|
||||
jQuery.propHooks.selected = {
|
||||
get: function( elem ) {
|
||||
@ -116,6 +119,16 @@ if ( !support.optSelected ) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
set: function( elem ) {
|
||||
var parent = elem.parentNode;
|
||||
if ( parent ) {
|
||||
parent.selectedIndex;
|
||||
|
||||
if ( parent.parentNode ) {
|
||||
parent.parentNode.selectedIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -788,6 +788,37 @@ QUnit.test( "prop('tabindex', value)", function( assert ) {
|
||||
assert.equal( clone[ 0 ].getAttribute( "tabindex" ), "1", "set tabindex on cloned element" );
|
||||
} );
|
||||
|
||||
QUnit.test( "option.prop('selected', true) affects select.selectedIndex (gh-2732)", function( assert ) {
|
||||
assert.expect( 2 );
|
||||
|
||||
function addOptions( $elem ) {
|
||||
return $elem.append(
|
||||
jQuery( "<option/>" ).val( "a" ).text( "One" ),
|
||||
jQuery( "<option/>" ).val( "b" ).text( "Two" ),
|
||||
jQuery( "<option/>" ).val( "c" ).text( "Three" )
|
||||
)
|
||||
.find( "[value=a]" ).prop( "selected", true ).end()
|
||||
.find( "[value=c]" ).prop( "selected", true ).end();
|
||||
}
|
||||
|
||||
var $optgroup,
|
||||
$select = jQuery( "<select/>" );
|
||||
|
||||
// Check select with options
|
||||
addOptions( $select ).appendTo( "#qunit-fixture" );
|
||||
$select.find( "[value=b]" ).prop( "selected", true );
|
||||
assert.equal( $select[ 0 ].selectedIndex, 1, "Setting option selected affects selectedIndex" );
|
||||
|
||||
$select.empty();
|
||||
|
||||
// Check select with optgroup
|
||||
$optgroup = jQuery( "<optgroup/>" );
|
||||
addOptions( $optgroup ).appendTo( $select );
|
||||
$select.find( "[value=b]" ).prop( "selected", true );
|
||||
|
||||
assert.equal( $select[ 0 ].selectedIndex, 1, "Setting option in optgroup selected affects selectedIndex" );
|
||||
} );
|
||||
|
||||
QUnit.test( "removeProp(String)", function( assert ) {
|
||||
assert.expect( 6 );
|
||||
var attributeNode = document.createAttribute( "irrelevant" ),
|
||||
|
Loading…
Reference in New Issue
Block a user