Bug Tracker

Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#12557 closed bug (notabug)

attr('selectedIndex') fails with 1.5.2+

Reported by: Denis TRUFFAUT Owned by: Denis TRUFFAUT
Priority: undecided Milestone: None
Component: unfiled Version: 1.8.0
Keywords: Cc:
Blocked by: Blocking:


Tested on 1.8.1 It is a regression since it was working with 1.5.2.

Test : http://jsfiddle.net/G9U6N/

Tags : JQuery select attr selectedIndex fail bug list change bind index

Test summary :

// /* attr('selectedIndex') fail test */ /* ------------------------------------------ */ /* Scenario is a beautiful CSS list binded */ /* on an ugly select. Click on list elements */ /* (1,2,3) to attempt to trigger the select */ /* ------------------------------------------ */ /* .fail works with 1.5 but fails with 1.5+ */ //

$('.fail').click(function() {

/* This line fails */ $('#my_select').attr('selectedIndex',parseInt($(this).html()) - 1); $('#my_select').trigger('change'); return false;


$('.ok').click(function() {

document.getElementById('my_select').selectedIndex = parseInt($(this).html()) - 1; $('#my_select').trigger('change'); return false;


<select id="my_select">

<option value='1'>Option 1</option> <option value='2'>Option 2</option> <option value='3'>Option 3</option>

</select> <br/> <table border=1 cellpadding=5 cellspacing=0>


<td width=100 align=center>Fail</td> <td width=100 align=center>OK</td>

</tr> <tr>

<td align=center>

<a class="fail" href="#">1</a><br/> <a class="fail" href="#">2</a><br/> <a class="fail" href="#">3</a><br/>

</td> <td align=center>

<a class="ok" href="#">1</a><br/> <a class="ok" href="#">2</a><br/> <a class="ok" href="#">3</a><br/>




Change History (3)

comment:1 Changed 3 years ago by rwaldron

  • Owner set to Denis TRUFFAUT
  • Status changed from new to pending

Thanks for taking the time to contribute to the jQuery project! Please provide a complete reduced test case on jsFiddle to help us assess your ticket!

Additionally, be sure to test against the "jQuery (edge)" version to ensure the issue still exists. To get you started, use this boilerplate: http://jsfiddle.net/FrKyN/ Open the link and click to "Fork" (in the top menu) to begin.

comment:2 Changed 3 years ago by dmethvin

  • Resolution set to notabug
  • Status changed from pending to closed

Yes, in older jQuery we mixed up the concepts of attributes and properties which we fixed in 1.6. There isn't a selectedIndex attribute:


However there is a property by that name so you want .prop() which retrieves properties. selectedIndex is a property of the select element.


Note that the DOM spec calls them "attributes" but they're properties. So it's understandable that everyone gets confused. But they're definitely different things, which is why there is now .attr() and .prop().

comment:3 Changed 3 years ago by timmywil

When reading the spec on the w3 website, you can differentiate what we refer to as attributes and properties by looking for the names content attributes (attributes) and IDL (Interface Definition Language) attributes (we call these properties). Both are called "attributes" in the spec, but they are clearly differentiated by what kind of "attribute" they mean. content -> .attr(), IDL -> .prop().

Note: See TracTickets for help on using tickets.