How do I programmatically set the value of a select box element using JavaScript?

后端 未结 17 1665
轮回少年
轮回少年 2020-11-22 06:33

I have the following HTML

相关标签:
17条回答
  • 2020-11-22 06:33

    I'm afraid I'm unable to test this at the moment, but in the past, I believe I had to give each option tag an ID, and then I did something like:

    document.getElementById("optionID").select();
    

    If that doesn't work, maybe it'll get you closer to a solution :P

    0 讨论(0)
  • 2020-11-22 06:36

    I tried the above JavaScript/jQuery-based solutions, such as:

    $("#leaveCode").val("14");
    

    and

    var leaveCode = document.querySelector('#leaveCode');
    leaveCode[i].selected = true;
    

    in an AngularJS app, where there was a required <select> element.

    None of them works, because the AngularJS form validation is not fired. Although the right option was selected (and is displayed in the form), the input remained invalid (ng-pristine and ng-invalid classes still present).

    To force the AngularJS validation, call jQuery change() after selecting an option:

    $("#leaveCode").val("14").change();
    

    and

    var leaveCode = document.querySelector('#leaveCode');
    leaveCode[i].selected = true;
    $(leaveCode).change();
    
    0 讨论(0)
  • 2020-11-22 06:38

    shortest

    This is size improvement of William answer

    this['leaveCode'].value = '14';
    

    this['leaveCode'].value = '14';
    <select id="leaveCode" name="leaveCode">
      <option value="10">Annual Leave</option>
      <option value="11">Medical Leave</option>
      <option value="14">Long Service</option>
      <option value="17">Leave Without Pay</option>
    </select>

    0 讨论(0)
  • 2020-11-22 06:39

    I compared the different methods:

    Comparison of the different ways on how to set a value of a select with JS or jQuery

    code:

    $(function() {
        var oldT = new Date().getTime();
         var element = document.getElementById('myId');
        element.value = 4;
        console.error(new Date().getTime() - oldT);
    
        oldT = new Date().getTime();
        $("#myId option").filter(function() {
            return $(this).attr('value') == 4;
        }).attr('selected', true);
        console.error(new Date().getTime() - oldT);
    
        oldT = new Date().getTime();
        $("#myId").val("4");
        console.error(new Date().getTime() - oldT);
    });
    

    Output on a select with ~4000 elements:

    • 1 ms
    • 58 ms
    • 612 ms

    With Firefox 10. Note: The only reason I did this test, was because jQuery performed super poorly on our list with ~2000 entries (they had longer texts between the options). We had roughly 2 s delay after a val()

    Note as well: I am setting value depending on the real value, not the text value.

    0 讨论(0)
  • 2020-11-22 06:46

    If you are using jQuery you can also do this:

    $('#leaveCode').val('14');
    

    This will select the <option> with the value of 14.


    With plain Javascript, this can also be achieved with two Document methods:

    • With document.querySelector, you can select an element based on a CSS selector:

      document.querySelector('#leaveCode').value = '14'
      
    • Using the more established approach with document.getElementById(), that will, as the name of the function implies, let you select an element based on its id:

      document.getElementById('leaveCode').value = '14'
      

    You can run the below code snipped to see these methods and the jQuery function in action:

    const jQueryFunction = () => {
      
      $('#leaveCode').val('14'); 
      
    }
    
    const querySelectorFunction = () => {
      
      document.querySelector('#leaveCode').value = '14' 
      
    }
    
    const getElementByIdFunction = () => {
      
      document.getElementById('leaveCode').value='14' 
      
    }
    input {
      display:block;
      margin: 10px;
      padding: 10px
    }
    <select id="leaveCode" name="leaveCode">
      <option value="10">Annual Leave</option>
      <option value="11">Medical Leave</option>
      <option value="14">Long Service</option>
      <option value="17">Leave Without Pay</option>
    </select>
    
    <input type="button" value="$('#leaveCode').val('14');" onclick="jQueryFunction()" />
    <input type="button" value="document.querySelector('#leaveCode').value = '14'" onclick="querySelectorFunction()" />
    <input type="button" value="document.getElementById('leaveCode').value = '14'" onclick="getElementByIdFunction()" />
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    0 讨论(0)
  • 2020-11-22 06:47

    You most likely want this:

    $("._statusDDL").val('2');
    

    OR

    $('select').prop('selectedIndex', 3); 
    
    0 讨论(0)
提交回复
热议问题