问题描述:

I have a DropDown list named as batches.

If I selected 2nd option,dropdown.selectedIndex inside the OnChange function always shows the selected index.

But document.getElementById("batches").selectedIndex always shows the 1st index.


Why is this?
Actually I want read the correct selectedIndex of batches in another function that's why I need a way to get the correct selected index in both ways.

function OnChange(dropdown){

var myindex = dropdown.selectedIndex;// This prints correctly

alert("Index : "+document.getElementById("batches").selectedIndex);// This is always 0 no metter what selects

}

<select name='batches' id='batches' onchange='OnChange(this);'>

<option value = "1">1</option>

<option value = "2">2</option>

<option value = "3">3</option>

</select>

网友答案:

I don't know what browser you are testing in, but the following always shows true in all browsers I tested in:

<select id="batches" onchange="
  alert(this.selectedIndex == document.getElementById('batches').selectedIndex);
">
  <option value = "1">1
  <option value = "2">2
  <option value = "3">3
</select>

<!-- and to confirm... -->
<button onclick="
  alert(document.getElementById('batches').selectedIndex);
">Show selected index</button>

I hope you aren't being confused by having options values 1, 2 and 3 correlate to selectedIndexes 0, 1 and 2.

网友答案:

Because you call the function onChange event i.e not in the past. Try to trigger the function without onchange event and the property is selected in the past

        <select name='batches' id='batches' onchange='someFunc();'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
<a href="javascript:someFunc()">Test</a>

<script>
function someFunc(){
   //var myindex  = dropdown.selectedIndex;// This prints correctly
   alert("Index : "+document.getElementById("batches").selectedIndex);// This is always 0 no metter what selects        
}
</script>

it will work. Just copy and paste this code into your text editor and test it

相关阅读:
Top