c# javascript select2 无法与来自 Ajax 的组合框一起使用

c# javascript select2 not working with combobox from Ajax

我想像这里一样: enter image description here

如果我单击按钮 [+],组合框将增加,但 javascript/select2 无法使用我从 Ajax.

获得的组合框

查看代码:

<input type="text" id="Jumlah" name="Jumlah" value="1" />
<div class="form-group">
    <div class="col-md-2">
        Pegawai<font class="text-danger">*</font>
    </div>
    <div class="col-md-1 text-right">
        1.
    </div>
    <div class="col-md-7">
        <input name='ComboboxPegawai_1' type="text" class="selectbox-o" style="width: 100%" />
    </div>
    <div class="col-md-2">
        <a class="btn btn-default" onclick="TambahPgw()">
            <span class="glyphicon glyphicon-plus"></span>
        </a>
    </div>
</div>
<div id="FormPegawai">

</div>

和脚本:

<script type="text/javascript">
    $(function () {
        $('.selectbox-o').select2({
          minimumInputLength: 0,
          ajax: {
               url: '@Url.Action("SearchPegawai", "Pegawai")',
               type: "post",
               dataType: 'json',
               data: function (term, page) {
                   return {
                      q: term
                   };
               },
               results: function (data, page) {
                    return { results: data };
                 }
              }
            });
        });


//this function for calling ajax to get new combobox

    function TambahPgw() {
        var x = parseInt($('#Jumlah').val());
        $.ajax({
            type: 'POST',
            data: {
                Jumlah: $('#Jumlah').val()
            },
            url: "/Coba/AjaxTambahPegawai/",
            success: function (data) {
                $("#FormPegawai").html($("#FormPegawai").html() + data);
                $('#Jumlah').val(x + 1);
            },
        });
    }
</script>

在控制器中,ajax 到 return 组合框:

public string AjaxTambahPegawai()
    {
        var Jumlah = Int32.Parse(Request["Jumlah"]) + 1;
        var form = "<div class='form-group'><div class='col-md-2'></div>" +
                   "<div class='col-md-1 text-right'>" + Jumlah + ".</div>" +
                   "<div class='col-md-7'>" +
                        "<input name='ComboboxPegawai_" + Jumlah + "' type='text' class='selectbox-o' style='width: 100%' />" +
                   "</div></div>";

        return form;
    }

也许 javascript 必须重新加载,但如何加载? 我试图为 select2 制作一个函数并放在 ajax -> success: function (data) { //functionselect2 }

但如果我在第一个组合框上进行了选择并单击按钮 [+],则所选内容会丢失,因为组合框会再次重新加载

将 html 放入 DOM 后,您需要使用 select2 初始化新输入。

$(".selectbox-o:last").select2(<options here!>);

但我认为这不是最佳解决方案...为什么要从控制器传递 html 数据而不是加载视图?

NS

在您的 ajax url 中,您没有引用文件。将其更改为:

/Coba/AjaxTambahPegawai.js

然后,将调用 AjaxTambahPegawai 的方式更改为函数:

function AjaxTambahPegawai(){
//stuff
return form;
}

您可能还想分隔行:

var Jumlah = Int32.Parse(Request["Jumlah"]) + 1;

从函数调用,而是将 Jumlah 作为参数传递给 AjaxTambahPegawai。