2011-12-20 62 views
14

我有一些关于jquery选择的问题。在我的情况下,如果option.value等于某事,该如何匹配,请为它标记selectedOnline code herejQuery的选择如果option.value等于东西,选择一个标记

再次重复代码。它导致Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val',如何工作,我的希望?谢谢。

<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> 
+0

也许这篇文章可以帮助你:http://stackoverflow.com/q/196684/508702 – 2011-12-20 08:26:12

回答

16

你在你的if语句做了一个错字

相反的(this).val()你应该使用$(this).val()this引用一个HTMLObject,$(this)引用一个jQuery对象。由于.val()方法是jQuery框架的一部分,因此您不能在HTMLObjects上使用它。但我相信你知道这一点,因为它看起来很像一个小小的错字。

这应该工作:

$(document).ready(function(){ 
    var num = 3; 
    $("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ // EDITED THIS LINE 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 

编辑

,当你发现你的元素,因此没有按”你可以通过添加一个return false;break;香草循环)优化循环在我们已经“完成”的时候保持循环元素。

但是,您应该看看Nicola Peluchetti的回答为更有效和更干净的代码。

0

您第一次参考this它不是一个jQuery对象,它是一个DOM对象,并且DOM对象没有val()方法。您应该使用this.value OCH $(this).val()试试这个:

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
0

您的代码效果很好。只需用$(this)更新'this'即可。如果没有其他选择下拉菜单,您可以省略'div#selection select'。如下所示。

$(document).ready(function(){ 
    var num = 3; 
    $("select option").each(function(){  
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 
15

你有一个错字,并选择作为选择的,你应该使用prop()而不是ATTR(套)。在任何情况下,你可以做

var num = 3; 
$("div#selection select.select option[value="+num+"]").prop("selected", true); 

这里小提琴http://jsfiddle.net/YRBrp/

编辑 - 当然错字就是蒂姆·S.指出的那样,你不应该(this).val()

+0

我完全同意你,但这并不能解释他的错误 – 2011-12-20 08:38:16

+0

另外,我编辑了我的帖子,并提到这个答案,因为它很性感 – 2011-12-20 08:43:06

+0

你救了我!我自己无法想到这一点。 +1 – 2012-01-31 08:35:47

0

试试下面

使用 $(this).val()
$("div#selection select.select").val(num); 

如果您的选择框是多个选择,您可以尝试

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
     $(this).attr("selected", true);  
     } 
    }); 
1

你的问题就在这里开始

$( “#DIV选择select.select 选项”)。每个(函数(){ 如果((本).VAL() == NUM​​){

改变它

$("div#selection select.select").each(function(){ 
if($(this).val()==num){ 

和所有解决的问题,你可能想改变如果你正在考虑在每次选择被改变时触发脚本,那么每一个改变。

相关问题