jqueryformsjquery-select2repeaterjquery.repeater

jQuery form repeater and select2 dont work together


I am using Select2 and jQuery form repeater (https://github.com/DubFriend/jquery.repeater)

I have searched on google/so for 2 days, but cant seem to get it to work.

include jquery/select2.js/jquery.repeater.js

var form = $('#form');
form.find('select').select2();

form.repeater({
    show: function () {
    $(this).show(function(){
        form.find('select').select2('destroy').select2();
    });
    },
    hide: function (remove) {
      $(this).hide(remove);
    }
});

The problem is the jQuery.repeater clones the div tag in which the input and select elements are when select2 is already initialized and has already changed the DOM, so jQuery.repeater copies the changed DOM. I tried to destroy select2 before the repeat action is called, but that dindt work either.


Solution

  • I'm working on a project where I use jQuery.repeater to repeat multiple select2 inputs. Following approach helped to solve my problem of initializing the inputs after they are loaded.

    $('.job_repeater').repeater({
      show: function () {
        $(this).slideDown();
        $('.select2-container').remove();
        $('Replace with your select identifier id,class,etc.').select2({
          placeholder: "Placeholder text",
          allowClear: true
        });
        $('.select2-container').css('width','100%');
      },
      hide: function (remove) {
        if(confirm('Confirm Question')) {
          $(this).slideUp(remove);
        }
      }
    });
    

    More exact jQuery selectors will help to only remove/initialize the selects you want to.

    The CSS line I use always after initializing the select2 to adjust the width to the parent div/container.

    Best regards