68

I'm currently using jQuery to return some JSON results. Once these results are returned, I'm using them to pre-populate fields in my form.

However, I need some help in pre-selecting items in a drop down box. For example, I have a select box (this is shortened):

<select id="startTime">
<option value="14:00:00">2:00 pm</option>
<option value="15:00:00">3:00 pm</option>
<option value="16:00:00">4:00 pm</option>
<option value="17:00:00">5:00 pm</option>
<option value="18:00:00">6:00 pm</option>
</select>

And if my JSON value is:

 var start_time = data[0].start  // Let's say this is '17:00:00'

How can I, using jQuery, make the option with value '17:00:00' selected?

 <option value="17:00:00" selected="selected">5:00 pm</option>
1
  • 1
    jQuery 1.9 changes this from .attr() to .prop(). I have provided an updated answer below. Commented Mar 6, 2013 at 19:12

8 Answers 8

96

update:

As of jQuery 1.9, jQuery has updated this functionality. The "selected" state of an option is actually a property, therefore jQuery has changed this to use the .prop() method. Syntax is very similar and easy to switch:

$('#startTime option[value=17:00:00]').prop('selected', true);

See http://api.jquery.com/prop/#entry-longdesc for why it needs to pass true.


Older jQuery

$('#startTime option[value=17:00:00]').attr('selected', 'selected');

or

$('#startTime option[value='+ data[0].start +']').attr('selected', 'selected');
Sign up to request clarification or add additional context in comments.

9 Comments

Good answer. I would probably also recommend accounting for which selection box like so: $('#mySelect option[value="17:00:00"]').attr('selected','selected');
If you have javascript watching for select/option's change event you need to add .trigger('change') so the event will be fired.
This will not work if you have a "default value", Such as "Select an option..." with a value = "". At least in Chrome, it will show that you have 2 options selected, the default and the one you selected programatically. Bug? In any case, use $('#startTime').val(start_time); instead
shouldn't you unselect the other options first/as well?
It should be ....prop('selected', true); you are exploting that non empty string gets evaluated to true ...
|
52
$('#startTime').val(start_time);

1 Comment

This needs to be the accepted answer. I don't understand the purpose of having to sniff through the Dom, perform possible string manipulations, and ultimately set the property value. It just makes sense to change the value of the select box unless I'm missing something..
13

It's just $("#startTime").val(start_time);

1 Comment

This worked for me. The other options did not work in Safari.. :(
12

$('#startTime').val(start_time);

If you want to trigger selected change event after selecting option:

$('#startTime').trigger("change");

1 Comment

Simple and effective!
10

UPDATE

As of jQuery 1.9, jQuery has updated changed this functionality. The "selected" state of an option is actually a property, therefore jQuery has changed this to use the .prop() method. Syntax is very similar and easy to switch:

$('option[value=17:00:00]').prop('selected', 'selected');

1 Comment

This just solved a huge problem I was having only in Firefox and Safari. Chrome and IE8 were behaving as expected with .attr(), but the others were breaking.
2

For some reason for me it works like this:

$('#startTime').val(''+data[0].start+'');

1 Comment

I believe that's equivalent to running $('#startTime').val(toString(data[0].start))
2

Additional Information for jquery mobile users (1.3.0):

Here's a similar example.

If you try the example above with jquery 1.9.1 and jquery mobile 1.3.0 you can see that it's not working unless you add a

$("#location_list").selectmenu("refresh");

Keep that in mind when working with jquery mobile. It gave me a lot of headache

Comments

2
var varValue="17:00:00";
$("#startTime").ready(function(){ 
   $("#startTime option[value='"+varValue+"']").prop("selected", "selected"); });

Works for me on jQuery 1.10

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.