jquery selection if option.value equal something, mark a selected

前端 未结 6 755
说谎
说谎 2021-02-12 19:45

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

相关标签:
6条回答
  • 2021-02-12 20:02

    try below

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

    if your select box is multiple select, you can try

        $("div#selection select.select option").each(function(){
          if($(this).val()==num){ 
            $(this).attr("selected", true);    
          }
       });
    
    0 讨论(0)
  • 2021-02-12 20:05

    Your problem starts here

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

    change it to

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

    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.

    0 讨论(0)
  • 2021-02-12 20:06

    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 the val() method. You should either use this.value och $(this).val() try this:

    $("div#selection select.select option").each(function(){
            if($(this).val()==num){
                $(this).attr("selected","selected");    
            }
        });
    
    0 讨论(0)
  • 2021-02-12 20:10

    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:

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

    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.

    0 讨论(0)
  • 2021-02-12 20:12

    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.

    $(document).ready(function(){
        var num = 3;
        $("select option").each(function(){     
            if($(this).val()==num){
                $(this).attr("selected","selected");    
            }
        });
    });
    
    0 讨论(0)
  • 2021-02-12 20:19

    You have a typo and to set the option as selected you should use prop() and not attr(). in any case you could do

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

    fiddle 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()

    0 讨论(0)
提交回复
热议问题