使用AJAX插入后,在Select2中设置数据

时间:2013-01-14 02:35:26

标签: jquery ajax jquery-select2

我正在使用带有AJAX的Select2(下面的代码):

$(".select2-ajax").select2({
        placeholder: "Search user",
        minimumInputLength: 1,
        ajax: {
            url: $('#url-search-client').val(),
            dataType: 'json',
            type: 'post',
            data: function (term, page) {
            return {
                filter: term
            };
            },
            results: function (data, page) {
            return {results: data};
            }
        },
        width : '50%',
        formatInputTooShort: function () {return 'Informe mais caracteres'; },
        formatResult: formatResultSelectAjax, // omitted for brevity, see the source of this page
        formatSelection: formatSelectAjaxValue, // omitted for brevity, see the source of this page
        dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller
    });

好吧,如果找不到客户端,用户可以使用按钮打开模态并添加新客户端,可以使用新客户端的返回(带有id和namae的json)并放入数据(如名称)进入选择的select2?

$('.btn-form-client').click(function() {
        $.ajax({
            url: $('#frm-client').attr('action'),
            dataType: 'json',
            type: 'post',
            data: $('#frm-client').serialize()
        }).done(function (data) {
            $('#modal-client').modal('hide')
        });
        return false;
    });

2 个答案:

答案 0 :(得分:19)

从v4.x开始,select2不再使用隐藏的input字段。相反,您create a new Option并将其附加到select元素:

var newOption = new Option(data.name, data.id, true, true);
$(".select2-ajax").append(newOption).trigger('change');

true参数和trigger('change')的组合将确保您的新<option>在添加后自动选中。

请参阅我的codepen以获取完整的工作示例。

答案 1 :(得分:1)

我设法让它发挥作用。在jQuery中POST之后,我获得了一个带有新数据的JSON,并设置了隐藏的输入和select('。select2-ajax')

$('#client=id').val(data.id);
$('#modal-solicitante').modal('hide'); //This is my
$(".select2-ajax").select2('data', {id: data.id, name: data.name, email: data.email});