mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Attributes: fix setting selected on an option in IE<=11
Fixes gh-2732 Close gh-2840
This commit is contained in:
parent
fe05cf37ff
commit
780cac802b
@ -79,6 +79,12 @@ jQuery.extend( {
|
|||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
// Support: IE <=11 only
|
||||||
|
// 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 ) {
|
if ( !support.optSelected ) {
|
||||||
jQuery.propHooks.selected = {
|
jQuery.propHooks.selected = {
|
||||||
get: function( elem ) {
|
get: function( elem ) {
|
||||||
@ -87,6 +93,16 @@ if ( !support.optSelected ) {
|
|||||||
parent.parentNode.selectedIndex;
|
parent.parentNode.selectedIndex;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
},
|
||||||
|
set: function( elem ) {
|
||||||
|
var parent = elem.parentNode;
|
||||||
|
if ( parent ) {
|
||||||
|
parent.selectedIndex;
|
||||||
|
|
||||||
|
if ( parent && parent.parentNode ) {
|
||||||
|
parent.parentNode.selectedIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -796,6 +796,37 @@ QUnit.test( "prop('tabindex', value)", function( assert ) {
|
|||||||
assert.equal( clone[ 0 ].getAttribute( "tabindex" ), "1", "set tabindex on cloned element" );
|
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 ) {
|
QUnit.test( "removeProp(String)", function( assert ) {
|
||||||
assert.expect( 6 );
|
assert.expect( 6 );
|
||||||
var attributeNode = document.createAttribute( "irrelevant" ),
|
var attributeNode = document.createAttribute( "irrelevant" ),
|
||||||
|
Loading…
Reference in New Issue
Block a user