how to refresh Select2 dropdown menu after ajax loading different content?

后端 未结 7 679
夕颜
夕颜 2020-12-08 19:42

I\'m using Select2 in a combination of dropdown menus. I have one menu for \"Countries\" and one for \"States/Provinces\". Depending on the country that is chosen, the \"Sta

相关标签:
7条回答
  • 2020-12-08 19:52

    It's common for other components to be listening to the change event, or for custom event handlers to be attached that may have side effects. Select2 does not have a custom event (like select2:update) that can be triggered other than change. You can rely on jQuery's event namespacing to limit the scope to Select2 though by triggering the *change.select2 event.

    $('#state').trigger('change.select2'); // Notify only Select2 of changes
    
    0 讨论(0)
  • 2020-12-08 20:11

    Got the same problem in 11 11 19, so sorry for possible necroposting. The only what helped was next solution:

    var drop = $('#product_1');   // get our element, **must be unique**;
    var settings = drop.attr('data-krajee-select2');  pick krajee attrs of our elem;
    var drop_id = drop.attr('id');  // take id 
    settings = window[settings];  // take previous settings from window;
    drop.select2(settings);  // initialize select2 element with it;
    $('.kv-plugin-loading').remove(); // remove loading animation;
    

    It's, maybe, not so good, nice and precise solution, and maybe I still did not clearly understood, how it works and why, but this was the only, what keeps my select2 dropdowns, gotten by ajax, alive. Hope, this solution will be usefull or may push you in right decision in problem fixing

    0 讨论(0)
  • Finally solved issue of reinitialization of select2 after ajax call.

    You can call this in success function of ajax.

    Note : Don't forget to replace ".selector" to your class of <select class="selector"> element.

    jQuery('.select2-container').remove();
    
    jQuery('.selector').select2({
       placeholder: "Placeholder text",
       allowClear: true
    });
    
    jQuery('.select2-container').css('width','100%');
    
    0 讨论(0)
  • 2020-12-08 20:13

    Select 3.*

    Please see Update select2 data without rebuilding the control as this may be a duplicate. Another way is to destroy and then recreate the select2 element.

    $("#dropdown").select2("destroy");
    
    $("#dropdown").select2();
    

    If you are having problems with resetting the state/region on country change try clearing the current value with

    $("#dropdown").select2("val", "");
    

    You can view the documentation here http://ivaynberg.github.io/select2/ that outlines nearly/all features. Select2 supports events such as change that can be used to update the subsequent dropdowns.

    $("#dropdown").on("change", function(e) {});
    

    Select 4.* Update

    You can now update the data/list without rebuilding the control using:

    fooBarDropdown.select2({
        data: fromAccountData
    });
    
    0 讨论(0)
  • 2020-12-08 20:17

    Initialize again select2 by new id or class like below

    when the page load

    $(".mynames").select2();
    

    call again when came by ajax after success ajax function

    $(".names").select2();
    
    0 讨论(0)
  • 2020-12-08 20:19

    select2 has the placeholder parameter. Use that one

    $("#state").select2({
       placeholder: "Choose a Country"
     });
    
    0 讨论(0)
提交回复
热议问题