laravel框架select2多选插件初始化默认选中项操作示例


Posted in PHP onFebruary 18, 2020

本文实例讲述了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对象。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
汉字转化为拼音(php版)
Oct 09 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
php传值和传引用的区别点总结
Nov 19 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 #PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 #PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 #PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 #PHP
laravel框架使用极光推送消息操作示例
Feb 15 #PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 #PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 #PHP
You might like
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
小程序关于请求同步的总结
2019/05/05 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
Java模拟试题
2014/11/10 面试题
面料业务员岗位职责
2013/12/26 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
公司建议书怎么写
2014/05/15 职场文书
工程售后服务方案
2014/06/08 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android