select2在回发时使用选定值初始化

时间:2015-03-10 08:20:52

标签: jquery ajax select initialization

我使用ajax get来填充select2单选中的值。

select2就像这样(jQuery):

    $("#domain").select2({
    placeholder: "Placeholder text",
    allowClear: true,
    multiple: false,
    ajax: {
        url: "/json/domain",
        dataType: "json",
        data: function(term, page) {
            return {
                q: term,
            };
        },
        results: function(data, page) {
            return data;
        }
    }

这是回复的一个例子:

{"results":[{"id":"1234","text":"Name"}]}

选择一个值后,select2会使用id更新隐藏的输入并显示" Name"在一个范围内。

select2是POST的一部分,它根据选定的值请求一堆数据。

所以在回发时,所选的值"名称"自然是从DOM中消失了(而#34; id"保留在隐藏的输入中)。

有没有办法在回发后初始化select2并选择预先提交的值(显示占位符预回复)?

在SO和其他地方环顾四周,我尝试过这样的事情:

    $("#domain").select2({
    placeholder: "Placeholder text",
    allowClear: true,
    multiple: false,
    ajax: {
        url: "/json/domain",
        dataType: "json",
        data: function(term, page) {
            return {
                q: term
            };
        },
        results: function(data, page) {
            return {results: data};
        }               
    },
    initSelection: function(element, callback) {
        var id = $('#domain').val();
        if(id !== "") {
            $.ajax("/json/domain", {
                dataType: "json"
            }).done(function(data) {
                callback(function(data) { callback(data); });
            });
        }
    }
});

初始化但返回" undefined"。我猜它是因为数据没有传递给initSelection ......

任何指向正确方向的人都会非常感激。

2 个答案:

答案 0 :(得分:0)

一切都很好,除了这个

initSelection: function(element, callback) {
    var id = $('#domain').val();
    if(id !== "") {
        $.ajax("/json/domain", {
            dataType: "json"
        }).done(function(data) {
            callback(function(data) { callback(data); });
        });
    }
}

不应该是

initSelection: function(element, callback) {
    var id = $('#domain').val();
    if(id !== "") {
        $.ajax("/json/domain", {
            dataType: "json"
        }).done(function(data) {
            callback(data); // here
        });
    }
}

只要data采用以下格式

[{id: 'this', text: 'this'}]

答案 1 :(得分:0)

如果我错了,请纠正我,但initSelection是Select2 3.5.2,选项。

在Select2 4.0中

  

现在由当前方法中的数据适配器处理   允许Select2将当前选定的值转换为数据   可以显示的对象。