i have a drop down like this
<select style="width: 280px" id="Mobility" name="Mobility">
<option selected="">Please Select</option>
<option>K</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
I use this line to select a value it works in Mozilla not in IE? Why its not working?
var element = document.getElementById("Mobility");
element.value = "10";
This question is related to
javascript
Yes. As mentioned in the posts, value
property is nonstandard and does not work with IE. You will need to use the selectedIndex
property to achieve this. You can refer to the w3schools DOM reference to see the properties of HTML elements. The following link will give you the list of properties you can work with on the select element.
http://www.w3schools.com/jsref/dom_obj_select.asp
Update
This was not supported during 2011 on IE. As commented by finnTheHuman, it is supported at present.
I realize that this is an old question, but I'll post the solution for my use case, in case others run into the same situation I did when implementing James Hill's answer (above).
I found this question while trying to solve the same issue. James' answer got me 90% there. However, for my use case, selecting the item from the dropdown also triggered an action on the page from dropdown's onchange
event. James' code as written did not trigger this event (at least in Firefox, which I was testing in). As a result, I made the following minor change:
function setSelectedValue(object, value) {
for (var i = 0; i < object.options.length; i++) {
if (object.options[i].text === value) {
object.options[i].selected = true;
object.onchange();
return;
}
}
// Throw exception if option `value` not found.
var tag = object.nodeName;
var str = "Option '" + value + "' not found";
if (object.id != '') {
str = str + " in //" + object.nodeName.toLowerCase()
+ "[@id='" + object.id + "']."
}
else if (object.name != '') {
str = str + " in //" + object.nodeName.toLowerCase()
+ "[@name='" + object.name + "']."
}
else {
str += "."
}
throw str;
}
Note the object.onchange()
call, which I added to the original solution. This calls the handler to make certain that the action on the page occurs.
Added code to throw an exception if option value
is not found; this is needed for my use case.
Using some ES6:
Get the options first, filter the value based on the option and set the selected attribute to true.
window.onload = () => {_x000D_
_x000D_
Array.from(document.querySelector(`#Mobility`).options)_x000D_
.filter(x => x.value === "12")[0]_x000D_
.setAttribute('selected', true);_x000D_
_x000D_
};
_x000D_
<select style="width: 280px" id="Mobility" name="Mobility">_x000D_
<option selected disabled>Please Select</option>_x000D_
<option>K</option>_x000D_
<option>1</option>_x000D_
<option>2</option>_x000D_
<option>3</option>_x000D_
<option>4</option>_x000D_
<option>5</option>_x000D_
<option>6</option>_x000D_
<option>7</option>_x000D_
<option>8</option>_x000D_
<option>9</option>_x000D_
<option>10</option>_x000D_
<option>11</option>_x000D_
<option>12</option>_x000D_
</select>
_x000D_
document.forms['someform'].elements['someelement'].value
Instead of doing
function setSelectedIndex(s, v) {
for ( var i = 0; i < s.options.length; i++ ) {
if ( s.options[i].value == v ) {
s.options[i].selected = true;
return;
}
}
}
I solved this problem by doing this
function setSelectedValue(dropDownList, valueToSet) {
var option = dropDownList.firstChild;
for (var i = 0; i < dropDownList.length; i++) {
if (option.text.trim().toLowerCase() == valueToSet.trim().toLowerCase()) {
option.selected = true;
return;
}
option = option.nextElementSibling;
}
}
If you work with strings, you should use the .trim()
method, sometimes blank spaces can cause trouble and they are hard to detect in javascript debugging sessions.
dropDownList.firstChild
will actually be your first option
tag. Then, by doing option.nextElementSibling
you can go to the next option
tag, so the next choice in your dropdownlist element. If you want to get the number of option
tags you can use dropDownList.length
which I used in the for loop.
Hope this helps someone.
Using Javascript:
document.getElementById('drpSelectSourceLibrary').value = 'Seven';
Using Jquery:
$('select').prop('selectedIndex', 3); // This will select the 4th option from the dropdown list
The simplest possible solution if you know the value
document.querySelector('option[value=" + value +"]').selected = true
function setSelectedIndex(s, v) {
for ( var i = 0; i < s.options.length; i++ ) {
if ( s.options[i].value == v ) {
s.options[i].selected = true;
return;
}
}
}
Where s is the dropdown and v is the value
easiest way is to just use this
document.getElementById("mySelect").value = "banana";
myselect is name of your dropdown banana is just one of items in your dropdown list
Source: Stackoverflow.com