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 相关文章推荐
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
JS中使用变量保存arguments对象的方法
Jun 03 Javascript
jQuery查找节点并获取节点属性的方法
Sep 09 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
vue axios整合使用全攻略
May 24 Javascript
node.js微信小程序配置消息推送的实现
Feb 13 Javascript
jQuery事件多次绑定与解绑问题实例分析
Feb 19 jQuery
JS字符串与二进制的相互转化实例代码详解
Jun 28 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
django 读取图片到页面实例
2020/03/27 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
工作表现评语
2014/01/19 职场文书
任命书格式
2014/06/05 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
酒后驾车标语
2014/06/30 职场文书
MySQL事务的隔离级别详情
2022/07/15 MySQL