I have some question about jquery selection. In my case, how to match if the option.value
equal something, mark a selected
for it. Online code here
repeat code again. It caused Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val'
, how to work as my hope? Thanks.
<script type="text/javascript">
$(document).ready(function(){
var num = 3;
$("div#selection select.select option").each(function(){
if((this).val()==num){
$(this).attr("selected","selected");
}
});
});
</script>
<div id="selection">
<label>Label1:</label>
<select class="select">
<option value="1">V1</option>
<option value="2">V2</option>
<option value="3">V3</option>
</select>
<label>Label2:</label>
<select class="select">
<option value="4">U1</option>
<option value="5">U2</option>
<option value="6">U3</option>
</select>
</div>
Your code works well. Just update 'this' with $(this). If there are no any other select dropdowns you can omit 'div#selection select.' like below.
Your problem starts here
$("div#selection select.select option").each(function(){ if((this).val()==num){
change it to
and all your problem solved. You might want to change the .each to .change if you are thinking of having the script triggered everytime the selection is changed.
You have a typo and to set the option as selected you should use
prop()
and not attr(). in any case you could dofiddle here http://jsfiddle.net/YRBrp/
EDIT - the typo of course is what Tim S. pointed out, you should use
$(this).val()
and not(this).val()
The first time where you refer to
this
it is not a jQuery object it is a DOM object and a DOM object doesn't have theval()
method. You should either usethis.value
och$(this).val()
try this:try below
if your select box is multiple select, you can try
You made a typo
Instead of
(this).val()
you should use$(this).val()
in your if statement.this
refers to a HTMLObject,$(this)
would refer to a jQuery object. Because the.val()
method is part of the jQuery framework, you can't use it on HTMLObjects. But I'm sure you knew that because it looks very much like a small typo.This should work:
Edit
You could optimize your loop by adding a
return false;
(break;
for vanilla loops) when you have found your element so it doesn't keep looping elements while we're already "done".However, you should look at Nicola Peluchetti's answer for a more efficient and cleaner code.