JS组件Bootstrap Select2使用方法详解


Posted in Javascript onApril 17, 2020

在介绍select组件的时候,之前分享过一篇JS组件中bootstrap multiselect两大组件较量的文章,这两个组件的功能确实很强大,本文分享下select组件的一些用法和特性。

一些通用的单选、多选、分组等功能这里就不多做介绍了,multiselect这方面是强项。重点介绍下select2的一些特性效果:

一、特性效果

1、多选效果

JS组件Bootstrap Select2使用方法详解

JS组件Bootstrap Select2使用方法详解

可以设置最多只能选几个

JS组件Bootstrap Select2使用方法详解

2、图文结合的效果

JS组件Bootstrap Select2使用方法详解

3、远程搜索功能(即在用户输入搜索内容时动态去后台取数据)

输入内容前

JS组件Bootstrap Select2使用方法详解

输入空格搜索出全部

JS组件Bootstrap Select2使用方法详解

滚动条滑动到底部自动加载剩余项

JS组件Bootstrap Select2使用方法详解

输入文本动态去后台过滤

JS组件Bootstrap Select2使用方法详解

更高级的用法如:

JS组件Bootstrap Select2使用方法详解

其实使用起来也不难,就是一个拼html的过程。

二、代码示例

1、多选效果

select2的多选很简单,设置一个属性就好了。

<script src="~/Scripts/jquery-1.10.2.js"></script>

 <script src="~/Content/bootstrap/js/bootstrap.js"></script>
 <link href="~/Content/bootstrap/css/bootstrap.css" rel="stylesheet" />

 <script src="~/Content/select2-master/dist/js/select2.js"></script>
 <link href="~/Content/select2-master/dist/css/select2.css" rel="stylesheet" />


<select id="sel_menu2" multiple="multiple" class="form-control">
 <optgroup label="系统设置">
 <option value="1">用户管理</option>
 <option value="2">角色管理</option>
 <option value="3">部门管理</option>
 <option value="4">菜单管理</option>
 </optgroup>
 <optgroup label="订单管理">
 <option value="5">订单查询</option>
 <option value="6">订单导入</option>
 <option value="7">订单删除</option>
 <option value="8">订单撤销</option>
 </optgroup>
 <optgroup label="基础数据">
 <option value="9">基础数据维护</option>
 </optgroup>
 </select>

 //多选
 $("#sel_menu2").select2({
 tags: true,
 maximumSelectionLength: 3 //最多能够选择的个数
 });

2、图文结合的效果

<select id="sel_menu" class="js-example-templating js-states form-control">
 <optgroup label="系统设置">
 <option value="1">用户管理</option>
 <option value="2">角色管理</option>
 <option value="3">部门管理</option>
 <option value="4">菜单管理</option>
 </optgroup>
 <optgroup label="订单管理">
 <option value="5">订单查询</option>
 <option value="6">订单导入</option>
 <option value="7">订单删除</option>
 <option value="8">订单撤销</option>
 </optgroup>
 <optgroup label="基础数据">
 <option value="9">基础数据维护</option>
 </optgroup>
 </select>



$(function () {
 //带图片
 $("#sel_menu").select2({
 templateResult: formatState,
 templateSelection: formatState
 });
});

function formatState(state) {
 if (!state.id) { return state.text; }
 var $state = $(
 '<span><img src="/content/images/' + state.element.value.toLowerCase() + '.ico" class="img-flag" /> ' + state.text + '</span>'
 );
 return $state;
};

3、远程搜索功能(即在用户输入搜索内容时动态去后台取数据)

<select id="sel_menu3" class="js-data-example-ajax form-control">
 <option value="3620194" selected="selected">请选择</option>
 </select>

$(function () {
 //远程筛选
 $("#sel_menu3").select2({
 ajax: {
 url: "/Home/GetProvinces",
 dataType: 'json',
 delay: 250,
 data: function (params) {
 return {
 q: params.term, // search term
 page: params.page
 };
 },
 processResults: function (data, params) {
 params.page = params.page || 1;

 return {
 results: data.items,
 pagination: {
 more: (params.page * 10) < data.total_count
 }
 };
 },
 cache: true
 },
 escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
 minimumInputLength: 1,
 templateResult: formatRepoProvince, // omitted for brevity, see the source of this page
 templateSelection: formatRepoProvince // omitted for brevity, see the source of this page
 });
});

function formatRepoProvince(repo) {
 if (repo.loading) return repo.text;
 var markup = "<div>"+repo.name+"</div>";
 return markup;
}

这里有要注意的一个地方就是processResults属性对应的方法有一个more属性用于是否分页显示的,这里的值要和你需要一次显示的值的条数匹配。

后台对应的方法如下:

public List<string> lstProvince = new List<string>() {"北京市","天津市","重庆市","上海市","河北省","山西省","辽宁省","吉林省","黑龙江省","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","海南省","四川省","贵州省","云南省","陕西省","甘肃省","青海省","台湾省","内蒙古自治区","广西壮族自治区","西藏自治区","宁夏回族自治区","新疆维吾尔自治区","香港特别行政区","澳门特别行政区" };
 public JsonResult GetProvinces(string q, string page)
 {
 var lstRes = new List<Province>();
 for (var i = 0; i < 30; i++)
 {
 var oProvince = new Province();
 oProvince.id = i;
 oProvince.name = lstProvince[i];
 lstRes.Add(oProvince);
 }
 if (!string.IsNullOrEmpty(q.Trim()))
 {
 lstRes = lstRes.Where(x => x.name.Contains(q)).ToList();
 }
 var lstCurPageRes = string.IsNullOrEmpty(page) ? lstRes.Take(10) : lstRes.Skip(Convert.ToInt32(page) * 10 - 10).Take(10);
 return Json(new { items = lstCurPageRes, total_count = lstRes.Count }, JsonRequestBehavior.AllowGet);
 }

上面说了这么多,那么我们在选中select2的选项之后如何取值和赋值呢?

1、获取选中的值

var oMenuIcon = $("#txt_menuicon_web").select2({
 placeholder: "请选择菜单图标",
 templateResult: oInit.formatState,
 templateSelection: oInit.formatState
 });
oMenuIcon.val();

2、设置select2的选中值

var oMenuIcon = $("#txt_menuicon_web").select2({
 placeholder: "请选择菜单图标",
 templateResult: oInit.formatState,
 templateSelection: oInit.formatState
 });
 oMenuIcon.val("CA").trigger("change");

如果大家还想深入学习,可以点击这里进行学习,再为大家附两个精彩的专题:Bootstrap学习教程 Bootstrap实战教程 Bootstrap插件使用教程

以上就是关于select2的一些特性效果介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 Javascript
学习Javascript闭包(Closure)知识
Aug 07 Javascript
Vue实现点击后文字变色切换方法
Feb 11 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
Apr 12 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 #Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 #Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 #Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 #Javascript
JavaScript小技巧整理篇(非常全)
Jan 26 #Javascript
基于canvas实现的绚丽圆圈效果完整实例
Jan 26 #Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 #Javascript
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
php生成rss类用法实例
2015/04/14 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
JS Array对象入门分析
2008/10/30 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
Node.js模块封装及使用方法
2016/03/06 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
详解Python中for循环是如何工作的
2017/06/30 Python
python使用turtle库绘制树
2018/06/25 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
学校交通安全责任书
2014/08/25 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
趣味运动会赞词
2015/07/22 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers