项目中用到了select2.js插件的ajax方式加载数据,在编辑数据的时候需要回显,找了很多文章,都不能正常回显,谷歌之后在官方的github上找到些蛛丝马迹,终于做了出来。
- 引js和css
- 初始化
下面是我在项目中的初始化方式。第三个函数echoSelect2就是回显数据用的。
function initSelect2(dom,url,multiple){
var subject = $(dom);//元素
var Select2 = subject.select2({
ajax: {
url: url,
dataType: 'json',
data: function (params) {
return {
name: params.term, // 搜索参数
};
},
processResults: function (data, params) {
for (var i = 0; i < data.length; i++) {
data[i].id = data[i].id;
data[i].text = data[i].name;
}
return {
results: data
};
},
cache: true
},
placeholder: "请输入名称搜索",
allowClear: true, //选中之后,可手动点击删除
escapeMarkup: function (markup) { return markup; }, // 让template的html显示效果,否则输出代码
minimumInputLength: 2, //搜索框至少要输入的长度,此处设置后需输入才显示结果
language: "zh-CN", //中文
multiple:multiple, //是否多选
width: 'resolve',
closeOnSelect:false,
templateResult: formatSubject, // 自定义下拉选项的样式模板
templateSelection: formatSubjectSelection // 自定义选中选项的样式模板
});
return Select2;
}
function formatSubject(item) {
if (item.loading) return item;
var markup = '<div> <p class="text-primary">学科名称:' + item.name|| item.text + '</p>';
//markup += '这里可以添加其他选项...';
markup += ' </div>';
return markup;
}
function formatSubjectSelection(item) {
return item.name || item.text;
}
//回显数据
function echoSelect2(dom,value){
$.each(value,function(index,value){
$(dom).append(new Option(value.name, value.id, false, true));
});
$(dom).trigger("change");
}
3.使用方式
var select2 = initSelect2("#school","/school/searchSchoolByName",true);
4. 回显方式
获取初始化数据定义成类似的数组形式:var data = [{id:1001,name:“哈哈哈”}];
调用方法echoSelect2("#school",data); 就完事了
5.结果图