本文实例讲述了laravel框架select2多选插件初始化默认选中项操作。分享给大家供大家参考,具体如下:
项目中有发送消息功能,需要能通过搜索,多选用户,来指定发送人。使用 select2 插件来完成。
select2 的 html 代码如下:
1
2
3
4
5
6
7
8
|
< div class = "form-group" id = "member_group" >
< label class = "col-lg-3 control-label required" >选择用户
< span class = "required" >*</ span >
</ label >
< div class = "col-lg-4" >
< select class = "form-control" name = "user_id[]" id = "member_select" multiple = "multiple" ></ select >
</ div >
</ div >
|
select2 的 js 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
//选择用户
$( "#member_select" ).select2({
ajax: {
//请求的URL
url: "{{ route('member.index') }}" ,
//返回的数据类型
dataType: "json" ,
//延迟时间,毫秒
delay: 500,
//是否缓存
cache: true ,
//查询数据
data: function (params) {
//params.term就是你搜索输入的参数
return {
search: params.term,
page: params.page || 1
};
},
//请求结果回调函数,data就是后端返回的数据
processResults: function (data, params) {
var data = data.data;
var results = [];
//循环数据,将数据压入results中
//注意数据必须要有二个属性,id和text,分别对应option的value和文本
//网上有些说无法选中元素,请先检查这里,你是否设置了id,并且不为空
$(data.data).each( function (i, obj) {
results.push({
id: obj.id,
text: obj.name
});
});
return {
results: results,
pagination: {
more: (data.current_page * data.per_page) < data.total
}
};
}
},
placeholder: '选择用户' ,
//是否多选
multiple: true ,
allowClear: true
});
|
后端返回的数据如下,直接使用 laravel 的 paginate() 方法 返回分页数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
{
"status_code" :200,
"message" : "查询成功" ,
"data" :{
"current_page" :1,
"data" :[
{
"id" :2006,
"name" : "用户1"
},
{
"id" :2005,
"name" : "用户3"
},
{
"id" :2004,
"name" : "用户3"
}
],
"first_page_url" : "http://test.me/member/index?page=1" ,
"from" :1,
"last_page" :1,
"last_page_url" : "http://test.me/member/index?page=1" ,
"next_page_url" : "http://test.me/member/index?page=1" ,
"path" : "http://test.me/member/index" ,
"per_page" :1,
"prev_page_url" : null ,
"to" : null ,
"total" :3
}
}
|
在编辑消息时,我们需要查看,这条消息发送给了哪些人,这就需要进入编辑页面时,让 select2 默认选中用户。
网上说通过如下方法可以选中。
1
|
$( "#spread_select" ).val([1, 2]).trigger( "change" );
|
但是我们这里select2的option是通过ajax动态加载的,刚进页面时,select2的ajax根本没有触发,导致select2中没有option元素,更无法被选中。
我们通过下面的方式,来实现默认选中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var selObj = [
{ "id" : 1, "name" : "小徐" },
{ "id" : 2, "name" : "小张" },
{ "id" : 3, "name" : "小明" },
];
( function initSel(selObj) {
if (selObj) {
for ( var ix = 0; ix < selObj.length; ix++) {
var item = selObj[ix];
var option = new Option(item.name, item.id, true , true );
$( "#member_select" ).append(option);
}
$( "#member_select" ).trigger( 'change' );
}
})(selObj);
|
selObj中的数据,可以通过PHP后端生成好后,渲染到页面,然后通过JSON.parse()解析成JSON对象。
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/jkko123/p/11218893.html