How to set selected value of jquery select2?

后端 未结 28 1131
野趣味
野趣味 2020-11-30 00:00

This belong to codes prior to select2 version 4

I have a simple code of select2 that get data from ajax



        
相关标签:
28条回答
  • 2020-11-30 00:40
    var $option = $("<option selected></option>").val('1').text("Pick me");
    
    $('#select_id').append($option).trigger('change');
    

    Try this append then select. Doesn't duplicate the option upon AJAX call.

    0 讨论(0)
  • 2020-11-30 00:41

    To dynamically set the "selected" value of a Select2 component:

    $('#inputID').select2('data', {id: 100, a_key: 'Lorem Ipsum'});
    

    Where the second parameter is an object with expected values.

    UPDATE:

    This does work, just wanted to note that in the new select2, "a_key" is "text" in a standard select2 object. so: {id: 100, text: 'Lorem Ipsum'}

    Example:

    $('#all_contacts').select2('data', {id: '123', text: 'res_data.primary_email'});
    

    Thanks to @NoobishPro

    0 讨论(0)
  • 2020-11-30 00:41

    Also as I tried, when use ajax in select2, the programmatic control methods for set new values in select2 does not work for me! Now I write these code for resolve the problem:

    $('#sel')
        .empty() //empty select
        .append($("<option/>") //add option tag in select
            .val("20") //set value for option to post it
            .text("nabi")) //set a text for show in select
        .val("20") //select option of select2
        .trigger("change"); //apply to select2
    

    You can test complete sample code in here link: https://jsfiddle.net/NabiKAZ/2g1qq26v/32/
    In this sample code there is a ajax select2 and you can set new value with a button.

    $("#btn").click(function() {
      $('#sel')
        .empty() //empty select
        .append($("<option/>") //add option tag in select
          .val("20") //set value for option to post it
          .text("nabi")) //set a text for show in select
        .val("20") //select option of select2
        .trigger("change"); //apply to select2
    });
    
    $("#sel").select2({
      ajax: {
        url: "https://api.github.com/search/repositories",
        dataType: 'json',
        delay: 250,
        data: function(params) {
          return {
            q: params.term, // search term
            page: params.page
          };
        },
        processResults: function(data, params) {
          // parse the results into the format expected by Select2
          // since we are using custom formatting functions we do not need to
          // alter the remote JSON data, except to indicate that infinite
          // scrolling can be used
          params.page = params.page || 1;
    
          return {
            results: data.items,
            pagination: {
              more: (params.page * 30) < data.total_count
            }
          };
        },
        cache: true
      },
      escapeMarkup: function(markup) {
        return markup;
      }, // let our custom formatter work
      minimumInputLength: 1,
      templateResult: formatRepo, // omitted for brevity, see the source of this page
      templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
    });
    
    function formatRepo(repo) {
      if (repo.loading) return repo.text;
    
      var markup = "<div class='select2-result-repository clearfix'>" +
        "<div class='select2-result-repository__avatar'><img src='" + repo.owner.avatar_url + "' /></div>" +
        "<div class='select2-result-repository__meta'>" +
        "<div class='select2-result-repository__title'>" + repo.full_name + "</div>";
    
      if (repo.description) {
        markup += "<div class='select2-result-repository__description'>" + repo.description + "</div>";
      }
    
      markup += "<div class='select2-result-repository__statistics'>" +
        "<div class='select2-result-repository__forks'><i class='fa fa-flash'></i> " + repo.forks_count + " Forks</div>" +
        "<div class='select2-result-repository__stargazers'><i class='fa fa-star'></i> " + repo.stargazers_count + " Stars</div>" +
        "<div class='select2-result-repository__watchers'><i class='fa fa-eye'></i> " + repo.watchers_count + " Watchers</div>" +
        "</div>" +
        "</div></div>";
    
      return markup;
    }
    
    function formatRepoSelection(repo) {
      return repo.full_name || repo.text;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2-rc.1/css/select2.min.css">
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2-rc.1/js/select2.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://select2.org/assets/a7be624d756ba99faa354e455aed250d.css">
    
    <select id="sel" multiple="multiple" class="col-xs-5">
    </select>
    
    <button id="btn">Set Default</button>

    0 讨论(0)
  • 2020-11-30 00:41

    Nice and easy:

    document.getElementById("select2-id_city-container").innerHTML = "Your Text Here";
    

    And you change id_city to your select's id.

    Edit: After Glen's comment I realize I should explain why and how it worked for me:

    I had made select2 working really nice for my form. The only thing I couldn't make work was to show the current selected value when editing. It was searching a third party API, saving new and editing old records. After a while I realized I didn't need to set the value correctly, only the label inside field, because if the user doesn't change the field, nothing happens. After searching and looking to a lot of people having trouble with it, I decided make it with pure Javascript. It worked and I posted to maybe help someone. I also suggest to set a timer for it.

    0 讨论(0)
  • 2020-11-30 00:43
        $("#select_location_id").val(value);
        $("#select_location_id").select2().trigger('change');
    

    I solved my problem with this simple code. Where #select_location_id is an ID of select box and value is value of an option listed in select2 box.

    0 讨论(0)
  • 2020-11-30 00:43

    if you are getting your values from ajax, before calling

    $("#select_location_id").val(value);
    $("#select_location_id").select2().trigger('change');

    confirm that the ajax call has completed, using the jquery function when

    $.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
          // the code here will be executed when all four ajax requests resolve.
          // a1, a2, a3 and a4 are lists of length 3 containing the response text,
          // status, and jqXHR object for each of the four ajax calls respectively.
        }); 
    as described here [Wait until all jQuery Ajax requests are done?

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