我使用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 ......
任何指向正确方向的人都会非常感激。
答案 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将当前选定的值转换为数据 可以显示的对象。