laravel框架select2多选插件初始化默认选中项操作示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-12 10:52:01 浏览: 评论:0
本文实例讲述了laravel框架select2多选插件初始化默认选中项操作,分享给大家供大家参考,具体如下:
项目中有发送消息功能,需要能通过搜索,多选用户,来指定发送人,使用 select2 插件来完成。
select2 的 html 代码如下:
- <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 代码如下:
- //选择用户
- $("#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() 方法 返回分页数据。
- {
- "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 默认选中用户。
网上说通过如下方法可以选中。
$("#spread_select").val([1, 2]).trigger("change");
但是我们这里select2的option是通过ajax动态加载的,刚进页面时,select2的ajax根本没有触发,导致select2中没有option元素,更无法被选中。
我们通过下面的方式,来实现默认选中。
- 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对象。
Tags: laravel多选插件 select2
相关文章
- ·yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析(2021-07-05)

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)