带克隆()的Select2不想工作

时间:2018-03-23 17:19:14

标签: jquery clone jquery-select2

当我使用clone()方法时,Select2的元素停止工作。我已经确认有必要使用方法" select2(' destroy')",但我仍然找不到问题。有人有任何提示吗?

这是使用select2(' destroy')方法的示例,在刚刚再次初始化元素之后。



jQuery(document).ready(function($) {

    $('.consultorio').find('select').select2({
      width: '100%'
    });

    // Include new clinic group fields
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".consultorios"); //Fields wrapper
    var item            = $("#consultorio");
    var add_button      = $("#add_consultorio"); //Add button ID
    var x               = 1; //initial text box count

    $('.num-clinic').html(x);

    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
          x++; //text box increment

      


          $(item).find('select').select2('destroy');
          var new_item = $(item).first().clone(true).appendTo(wrapper);

          new_item.find('input,select').val('');
          new_item.attr('id', $(new_item).attr('id')+'_'+ x );
          new_item.find('.num-clinic').html(x);
          new_item.find('input,select').each(function(){
            $(this).attr('id', $(this).attr('id')+'_'+ x );
          })


          $(item).find('select').select2({ width: '100%' });
          $('select').select2({
            width: '100%',
            // language: 'pt-BR',
            language: {
              noResults: function (params) {
                return 'Não encontramos sua localização. Por favor, tente novamente ou selecione a localidade mais próxima.';
              }
            }
          });


        }
    });

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault();
        $(this).parents('fieldset').remove();
        x--;
    })

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/>


<div class="consultorios" id="consultorios">

                <fieldset class="consultorio py-sm-4" id="consultorio">
                  <div class="form-row">
                    <div class="col-md-6">
                      <legend>Consultorio <span class="num-clinic"></span></legend>
                    </div>
                    <div class="col-md-6 text-right">
                      <a class="remove_field" href="#"><img src="<?php bloginfo('template_url'); ?>/assets/images/icon-erase@2x.png" alt="Excluir"></a>
                    </div>
                  </div>
                  <div class="form-row">
                    <div class="form-group col-md-4">
                      <label class="sr-only" for="consultorio_nome">Nome do Consultório</label>
                      <input type="text" class="form-control required" name="consultorio_nome[]" id="consultorio_nome" placeholder="Nome do Consultório">
                    </div>
                    <div class="form-group col-md-4">
                      <label class="sr-only" for="consultorio_especialidade">Especialidade</label>
                      <select name="consultorio_especialidade[]" id="consultorio_especialidade" class="required">
                        <option value="" selected>Especialidade</option>
                        <option value="Especialidade 1">Especialidade 1</option>
                        <option value="Especialidade 2">Especialidade 2</option>
                        <option value="Especialidade 3">Especialidade 3</option>
                      </select>
                    </div>
                    <div class="form-group col-md-4">
                      <label class="sr-only" for="consultorio_valor_consulta">Valor da Consulta (Exemplo: R$ 100,00)</label>
                      <input type="text" class="form-control required" name="consultorio_valor_consulta[]" id="consultorio_valor_consulta" placeholder="R$ Valor da Consulta (Ex.: R$ 100,00)">
                    </div>
                  </div>
                  <div class="form-row">
                    <div class="form-group col-md-3">
                      <label class="sr-only" for="consultorio_cep">CEP</label>
                      <input type="text" class="form-control required" name="consultorio_cep[]" id="consultorio_cep" placeholder="CEP">
                    </div>
                    <div class="form-group col-md-5">
                      <label class="sr-only" for="consultorio_bairro">Bairro</label>
                      <input type="text" class="form-control required" name="consultorio_bairro[]" id="consultorio_bairro" placeholder="Bairro">
                    </div>
                    <div class="form-group col-md-2">
                      <label class="sr-only" for="consultorio_estado">Estado</label>
                      <select name="consultorio_estado[]" id="consultorio_estado" class="estado-ajax required">
                      </select>
                    </div>
                    <div class="form-group col-md-2">
                      <label class="sr-only" for="consultorio_cidade">Cidade</label>
                      <select name="consultorio_cidade[]" id="consultorio_cidade" class="cidade-ajax required">
                      </select>
                    </div>
                  </div>
                  <div class="form-row">
                    <div class="form-group col-md-8">
                      <label class="sr-only" for="consultorio_endereco">Endereço</label>
                      <input type="text" class="form-control required" name="consultorio_endereco[]" id="consultorio_endereco" placeholder="Endereço (Ex.: Rua Alexandre Dumas, 1678)">
                    </div>
                    <div class="form-group col-md-4">
                      <label class="sr-only" for="consultorio_referencia">Ponto de Referência</label>
                      <input type="text" class="form-control required" name="consultorio_referencia[]" id="consultorio_referencia" placeholder="Ponto de Referência">
                    </div>
                  </div>
                </fieldset>

              </div>

              <button class="btn btn-primary" id="add_consultorio">+ consultório</button>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您必须在克隆之前先销毁select2,但.select2('destroy')无效。使用这个:

var cloneObj = $('.newRow tr').clone();
cloneObj.find("span.select2 ").remove();
cloneObj.find("select").select2();
$(".itemList tbody").append(cloneObj);