jquery选择如果option.value等于某事,则标记一个选中的

时间:2011-12-20 08:23:10

标签: jquery jquery-selectors

我对jquery选择有一些疑问。在我的情况下,如果option.value等于某事,如何匹配,为其标记selectedOnline code here

再次重复代码。它引起了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>

6 个答案:

答案 0 :(得分:19)

你弄错了

您应该在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; for vanilla循环)来优化循环,以便在我们已经“完成”时不会保留循环元素。< / p>

但是,您应该查看 Nicola Peluchetti的答案,以获得更高效,更清晰的代码。

答案 1 :(得分:17)

你有一个拼写错误并将选项设置为选中你应该使用prop()而不是attr()。在任何情况下你都可以做到

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

在这里摆弄http://jsfiddle.net/YRBrp/

编辑 - 错误当然是Tim S.指出的,你应该使用$(this).val()而不是(this).val()

答案 2 :(得分:1)

你的问题从这里开始

$(&#34; div#selection select.select 选项 &#34;)。each(function(){         如果(的 (本).VAL() == NUM​​){

将其更改为

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

你所有的问题都解决了。如果您考虑在每次更改选择时触发脚本,您可能希望将.each更改为.change。

答案 3 :(得分: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");    
        }
    });

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

尝试以下

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

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

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