前言

select2相比较以往的select下拉框比起来,确实非常方便,它提供了一个可自定义的选择框,支持搜索,标记,远程数据集,无限滚动以及许多其他高度使用的选项。

select2的安装详情请看官方文档介绍的配置方式:https://select2.org/getting-started/installation

支持的类型

传统的 <select> 框中包含任意数量的<option>元素。其中每个都在下拉菜单中呈现为一个选项。Select2在其上初始化时保留此行为<select>包含的元素 <option> 元素,将它们转换为内部JSON表示:

{"id": "value attribute" || "option text","text": "label attribute" || "option text","element": HTMLOptionElement
}

关于分层

每个HTML规范只允许一个级别的嵌套。如果你<optgroup> 在又建立一个 <optgroup>,Select2将无法检测到额外的嵌套级别,因此可能会触发错误。

此外, <optgroup>元素不能被选择。这是HTML规范的限制,并不是Select2可以克服的限制。

如果您希望创建可选选项的真实层次结构,请使用 <option> 而不是 <optgroup>并使用CSS更改样式。请注意,这种方法可能被认为是“不太容易访问”,因为它依赖于CSS样式,而不是语义<optgroup>,以产生效果。

Select2数据格式

Select2可以从数组或远程数据源(AJAX)以编程方式提供的数据作为下拉选项。为了实现这一目标,Select2需要一种非常具体的数据格式。此格式由一个JSON对象组成,该对象包含由键控的对象数组result键。

{  "results": [{"id": 1,"text": "Option 1"},{"id": 2,"text": "Option 2","selected": true},{"id": 3,"text": "Option 3","disabled": true}],"pagination": {"more": true       }
}

注:

  1. 如果您想使用“无限滚动”功能, //响应对象还可能包含分页数据。需要指定pagination键。
  2. 提供 selected 和 disabled此数据结构中的选项的属性   默认为不选中,true为选中

将数据转换为所需的格式

由于一般select数据可能会来源与后台,但Select2要求该id,text属性用于唯一标识结果列表中显示的选项。如果使用id(类似pk)以外的属性来唯一标识选项,则需要将旧属性映射到id,text将其传递给Select2之前。如果您无法在服务器上执行此操作,或者您处于无法更改API的情况,则可以在将其传递给Select2之前在JavaScript中执行此操作:

var data = $.map(yourArrayData, function (obj) {obj.id = obj.id || obj.pk; // replace pk with your identifierobj.text = obj.text || obj.name; // replace name with the property used for the textreturn obj;
});

注:不允许使用空格idid0

分组数据

{"results": [{ "text": "Group 1", "children" : [{"id": 1,"text": "Option 1.1"},{"id": 2,"text": "Option 1.2"}]},{ "text": "Group 2", "children" : [{"id": 3,"text": "Option 2.1"},{"id": 4,"text": "Option 2.2"}]}],"pagination": {"more": true}
}

注:在创建嵌套选项时,仅支持单级嵌套。不保证在所有浏览器和设备上正确显示任何其他嵌套级别。

也可以加载数组数据

var data = [{id: 0,text: 'enhancement'},{id: 1,text: 'bug'},{id: 2,text: 'duplicate'},{id: 3,text: 'invalid'},{id: 4,text: 'wontfix'}
];$(".js-example-data-array").select2({data: data
})
$(".js-example-data-array-selected").select2({data: data
})

选择后强制下拉列表保持打开状态

$('#mySelect2').select2({closeOnSelect: false
});

下拉列表

$('#mySelect2').select2({dropdownParent: $('#myModal')
});

默认情况下,Select2会将下拉列表附加到正文的末尾,并将其绝对定位到选择容器的上方或下方。

如果容器下方没有足够的空间,Select2将显示容器上方的下拉列表,但上面有足够的空间。

可清除的全部已选择的option

$('select').select2({placeholder: 'This is my placeholder',allowClear: true
});

设置true为时,如果选择了值,则会在选择框中显示清除按钮(“x”图标)。单击清除按钮将清除所选值,有效地将选择框重置回其占位符值。

自动标记到标签中

$(".js-example-tokenizer").select2({tags: true,tokenSeparators: [',', ' ']
})

Select2支持在用户键入搜索字段时自动添加选项的功能。尝试在下面的搜索字段中输入并输入空格或逗号。

单选选择占位符(无非就是默认值)

<select class="js-example-placeholder-single js-states form-control"><option></option>
</select>

默认尝试选择第一个选项。如果您的第一个选项非空,浏览器将显示此选项而不是占位符。

多选占位符

$('select').select2({placeholder: {id: '-1', // the value of the optiontext: 'Select an option'}
});

事件列表

当用户在select2上执行不同操作时,select2会触发不同的事件,用户能够监听这些事件,并且添加相应的处理。 
用户也可以通过.trigger来手动触发这些事件。

事件 描述
change 选择或删除选项时触发。
change.select2 Scoped版本 change。请参阅下文了解更多详情。
select2:closing 在下拉列表关闭之前触发。可以防止此事件。
select2:close 每当下拉菜单关闭时触发。 select2:closing 在此之前被解雇并且可以被阻止。
select2:opening 在下拉列表打开之前触发。可以防止此事件。
select2:open 每次下拉打开时触发。 select2:opening 在此之前被解雇并且可以被阻止。
select2:selecting 在选择结果之前触发。可以防止此事件。
select2:select 选择结果时触发。 select2:selecting 在此之前被解雇并且可以被阻止。
select2:unselecting 在删除选择之前触发。可以防止此事件。
select2:unselect 删除选择时触发。 select2:unselecting 在此之前被解雇并且可以被阻止。
select2:clearing 在清除所有选择之前触发。可以防止此事件。
select2:clear 清除所有选择时触发。 select2:clearing 在此之前被解雇并且可以被阻止。

获取选中值

方法1:

$('#mySelect2').select2('data');

返回一个js对象数组,包括选中项的所有properties/values。

方法2:

$('#mySelect2').find(':selected');

浅谈select2的使用相关推荐

  1. 浅谈select2使用

    select2有很多的属性.事件,列举一些常用的栗子 引入select2插件后,最简单的使用方式,不带ajax请求 $("#demo").select2({placeholder: ...

  2. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  3. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  4. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  5. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  6. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  7. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  8. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  9. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  10. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

最新文章

  1. php$SQL时间函数,PHP模拟SQL Server的两个日期处理函数-PHP教程,PHP应用
  2. 怀念 儿时课本贴图,你还记得课文名吗
  3. (chap6 Http首部) 响应首部字段 AllowCt-EncodingCt-LanguageCt-LengthCt-Location
  4. Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割
  5. mysql+影响的行数+获取_CI中获取读操作的结果集行数+获取写操作的影响行数
  6. 修改linux系统的open files参数
  7. 南阳理工ACM(题目56)
  8. python对工程造价有用吗_工程造价真的不行了吗?
  9. WPS2000中实现立体字效果(转)
  10. linux网络通讯架构实战篇【02、nginx整体结构、进程模型】
  11. Mac能连接手机热点却无法上网问题解决
  12. 我建议你自己写一个疫情数据监控
  13. TortoiseSVN简明教程
  14. Andriod 简介
  15. AlphaPose环境配置与测试
  16. vue图片加载不出来的问题
  17. 如何获取网易云音频地址
  18. JQuery替换元素
  19. Xshell实现windows上传文件到Linux系统
  20. cocos2d-2.1rc0-x-2.1.3运行libcurl返回CURLE_COULDNT_CONNECT(7)

热门文章

  1. win10的ios镜像
  2. JavaEE-面试-Solr面试回答思路
  3. RS纠删码性能分析实战
  4. 计算机学术论文3000字,计算机学术论文3000字_计算机学术毕业论文范文模板.doc...
  5. c51汇编语言循环指令,汇编语言循环指令loop
  6. UA PHYS515 电磁理论I 麦克斯韦方程组基础2 从实验定律到麦克斯韦方程
  7. scsi服务器硬盘如何用,实战:不重启服务器添加scsi硬盘
  8. 傅里叶变换落地:离散傅里叶变换(DFT)
  9. matlab与螺旋桨,基于Matlab的船用螺旋桨计算机实时仿真及GUI设计
  10. Overloud TH3 for Mac(电吉他效果器)