使用jquery动态添加时select2不起作用

Posted

技术标签:

【中文标题】使用jquery动态添加时select2不起作用【英文标题】:select2 doesn't work when add from dynamically with jquery 【发布时间】:2017-11-28 06:18:28 【问题描述】:

我有一个元素是动态的形式。我们可以根据需要添加一行。这是一个图片链接 dynamic form

如我们所见,我们可以添加一行,只需按“tambah kolom”按钮,然后该行将附加到表单。我使用 jquery 添加动态。这是我的表单代码

HTML

<tr>
        <td>
            <input type="number" class="form-control" value=" old('itemujiriksa[0][jumlah_barang]') " name="itemujiriksa[0][jumlah_barang]">
        </td>                
        <td>
            <input type="text" class="form-control" value=" old('itemujiriksa[0][nama_barang]') " name="itemujiriksa[0][nama_barang]">
        </td>
        <td class="form_tabung">
            <select name="itemujiriksa[0][tube_id]" class="form-control tube" style="width: 100%">
            </select>
        </td>
        <td class="form_alat" style="display:none">
            <select name="itemujiriksa[0][alat_id]" class="form-control alat" style="width: 100%">
            </select>
        </td>
        <td>
            <input type="text" class="form-control" value=" old('itemujiriksa[0][keluhan]') " name="itemujiriksa[0][keluhan]">
        </td>
        <td>
            <input type="file" class="form-control" value=" old('itemujiriksa[0][fototabung][]') " name="itemujiriksa[0][fototabung][]" multiple />
        </td>
    </tr>

这是我的 jquery 代码

jquery

<script>
$(document).ready(function() 
var max_fields      = 10; //maximum input boxes allowed
var wrapper         = $("#input_fields_wrap"); //Fields wrapper
var add_button      = $("#add_field_button"); //Add button ID

var x = $a; //initlal text box count
$(add_button).click(function(e) //on add input button click
    e.preventDefault();
    if(x < max_fields) //max input box allowed
        $(wrapper).append('<tr>\
        <td>\
            <input type="number" class="form-control" value=" old('jumlah_barang[]') " name="itemujiriksa[' + x +'][jumlah_barang]">\
        </td>\
        <td>\
            <input type="text" class="form-control" value=" old('nama_barang[]') " name="itemujiriksa[' + x +'][nama_barang]">\
        </td>\
        <td class="form_tabung">\
            <select name="itemujiriksa[0][tube_id]" class="form-control tube" style="width: 100%">\
            </select>\
        </td>\
        <td class="form_alat" style="display:none">\
            <select name="itemujiriksa[0][alat_id]" class="js-selectize form-control" placeholder="Pilih No Alat">\
                <option disabled selected value></option>\
                @foreach($alats as $at)\
                    <option value=" $at->id "> $at->no_alat </option>\
                @endforeach\
            </select>\
        </td>\
        <td>\
            <input type="text" class="form-control" value=" old('keluhan[]') " name="itemujiriksa[' + x +'][keluhan]">\
        </td>\
        <td>\
            <input type="file" class="form-control" value=" old("itemujiriksa['+ x +'][fototabung][]") " name="itemujiriksa[' + x +'][fototabung][]" multiple>\
        </td>\
        <td><a class="btn btn-danger remove_field">Hapus Kolom</a></td>\
    </tr>'); //add input box
        x++; //text box increment
    
);

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

这是我的 select2 代码

SELECT2

$(document).ready(function()  var $select2Elm = $('.alat');
$select2Elm.select2(
        width: 'resolve',
        placeholder: "Pilih No Alat",
        ajax: 
            url: function()
                var value = $('#customer').val();
                var url = "/admin/getDataAlat/ujiriksa/"+value;
                console.log(url);
                return url;
            ,
            dataType: 'json',
            type: "GET",
            delay: 250,
            data: function (params) 
              return 
                q: params.term, // search term
                page: params.page
              ;
            ,
            processResults: function (data, page) 
              // 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
              return 
                results: $.map(data, function (item) 
                    return 
                        text: item.name,
                        id: item.id
                    
                )
              ;
            ,
            cache: true
          ,
); );

我的问题是

我已经定义了类 alat 来启动 no tabung 选择框以从 select2 填充数据。但是在添加一个新行之后,类是相同的。新的选择框不填充数据。我该怎么办?

【问题讨论】:

【参考方案1】:

您需要在附加 html 后初始化每个新的 select 元素。

$(add_button).click(function(e)

    //append new table rows here
    $(wrapper).append('...');

    //reinitialize the new select box
    $('.alat').select2(
     //configuration
    );

);

【讨论】:

【参考方案2】:

您可以在附加代码后进行初始化。

你可以看到下面的例子
$(document).on("click",".add-new-item",function(e)
var html = 'your html';
    $( '.element' ).append(html);
    initSelect2(););

function initSelect2() 
 $('.select2_single').select2();

【讨论】:

以上是关于使用jquery动态添加时select2不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在我追加新行后,select2 不起作用

Select2 - 多个标签不起作用

动态生成表中的另一行后,JQuery函数不起作用[重复]

jquery验证动态表单输入的插件不起作用

单击时 select2-rails 标签下拉菜单不起作用

添加 select2 插件以选择选项后。 Laravel Livewire 搜索不起作用