官方网址:
https://select2.github.io/examples.html
低版本文档:
http://select2.github.io/select2/#documentation
经验分享:http://www.tuicool.com/articles/nYVn22e
1、如果默认值没有效果
请查看默认值是否是id的集合,或单个id
2、select2 js报错
请查看select2版本与本贴是否一致
- <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
- <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
- <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
- <!-- select2需要组件 -->
- <link rel="stylesheet" type="text/css" href="css/select2.min.css" />
- <script src="js/select2.full.js"></script>
一、预先加载json,再进行匹配
- <select class="js-example-basic-multiple"></select><!-- 下拉元素 -->
- <input class="infotags form-control" id="infotags" type="text" value="大树路1,大树路2,大树路3" /><!-- 保存记录元素 -->
- <script>
- var $eventSelect=$('.js-example-basic-multiple'); // 下拉元素ID
- var $eventInfotags = $("#infotags"); // 保存记录元素I
- var dataArr=$eventInfotags.val().split(","); //获取保存是数组 (比如信息修改的时候)
- $.ajax({
- url:"data.txt",
- dataType:"json",
- success:function(data,status){
- var o = data.items, html='';//获取数据 定义一个结果集合变量
- $.each(o, function(index, val) {
- html+='<option value='+val.tagname+' data-tagid='+val.tagid+'>'+val.tagname+'</option>'; // 循环出html集合
- });
- $eventSelect.html(html).select2({
- placeholder: "请选择",
- width: "500",
- tags: true,
- separator: ",", // 分隔符
- multiple: "multiple",
- multiply: true,
- initSelection: function (element, callback) {
- var data = [];
- $.each(dataArr,function(index, el) {
- data[index]= {"id":el,"text":el}; // 组合选中样式数据
- });
- callback(data);// 默认选中
- },
- }).val(dataArr); //把结果集合赋予元素并且绑定select2 , .val是赋予下拉默认选中
- $eventSelect.on("change", function (e) {
- $eventInfotags.val($eventSelect.select2('val')); // 获取选择的数据并放到要保存的元素中
- });
- }
- });
- </script>
2、预先加载json,并且有初始值为option的value值,单选:
- var $eventSelect=$('.example-baseic'); // 下拉元素ID
- var $eventInfo2 = $("#parent_tag_id"); // 保存记录元素I
- var dataArr2 = $eventInfo2.val();
- var dft_value = "<?=$tagView['parent_tag_id']?>";
- var dft_text = "<?=$parentTagView['text']?>";
- var arr = [];
- arr = {"id":dft_value,"text":dft_text}// 组合选中样式数据
- $.ajax({
- url:"contrl.php<?=$ecms_hashur['whehref']?>&act=getParentTags",
- dataType:"json",
- success:function(data,status){
- // console.log(data);
- $eventSelect.select2({
- placeholder: "选择父级",
- width: "100%",
- data:data.data,
- initSelection: function (element, callback) {
- callback(arr);// 默认选中
- },
- }).val(dft_value);
- }
- });
- $eventSelect.on("change", function (e) {
- data = $eventSelect.select2('val');
- $eventInfo2.val(data); // 获取选择的数据并放到要保存的元素中
- });
二、单选:ajax 模糊匹配 动态加载
- <select class="example-baseic"></select>
- <input type="text" class="form-control" id="example2" value="笔记" />
- <script>
- // example2
- var $eventSelect2=$('.example-baseic'); // 下拉元素ID
- var $eventInfo2 = $("#example2"); // 保存记录元素I
- var dataArr2 = $eventInfo2.val();
- $eventSelect2.select2({
- placeholder: "输入TAG",
- width: "500",
- tags: true, // 将Select2放入“标签'mode
- separator: ",", // 分隔符字符或字符串用来划定id
- multiply: true, // 是否允许选择多个值
- dir: "rtl",
- initSelection: function (element, callback) {
- var data = [];
- data = {"id":dataArr2,"text":dataArr2}; // 组合选中样式数据
- callback(data);// 默认选中
- },
- ajax: {
- url: "/e/extend/api/index.php?act=getTags",
- type:"POST",
- dataType: 'json',
- delay: 500,
- data: function (params) {
- return {
- q: params.term, // 将输入的字符传递到ajax中,q可以改为常用的变量名
- page: params.page // 页码
- };
- },
- processResults: function (data, page) {
- // console.debug("ajax返回的对象是:")
- // console.debug(data.data)
- return {
- results: data.data
- };
- },
- cache: true
- },
- escapeMarkup: function (markup) {
- // console.debug(markup)
- return markup;
- }, // let our custom formatter work
- minimumInputLength: 1, // 最小数量的字符后才会去调用ajax
- maximumInputLength: 20, // 最大数量的字符后才会去调用ajax
- minimumResultsForSearch: 1, // 最小数量的结果
- templateResult: formatRepo,
- templateSelection: formatRepoSelection
- });
- /* 这里2个函数是用于查询到内容后,显示在select2的下拉框里面 */
- function formatRepo (repo) { //显示在select下拉框中的模板
- if (repo.loading) return repo.text;
- var markup = '<li>' + repo.text + '</li>';
- return markup;
- }
- function formatRepoSelection (repo) {
- repo.selected = true;
- if(repo.id == null || repo.id == ""){
- repo.text = '选择'
- repo.text = repo.text
- }
- $eventInfo2.val(repo.text);
- // console.debug(repo);
- // return repo.id;//下拉框中返回ID
- return repo.text;
- }
- /* 这里2个函数是用于查询到内容后,显示在select2的下拉框里面 end */
- </script>
三、多选
- <select class="example-baseic3"></select>
- <input type="text" class="form-control" id="example3" value="笔记,插件,JS插件" />
- <script>
- // example3
- var $eventSelect3=$('.example-baseic3'); // 下拉元素ID
- var $eventInfo3 = $("#example3"); // 保存记录元素I
- var dataArr3 = $eventInfo3.val()?$eventInfo3.val().split(","):[];
- var data = [];
- $.each(dataArr3,function(index, el) {
- data[index]= {"id":el,"text":el}; // 组合选中样式数据
- });
- // console.log(data);
- $eventSelect3.select2({
- placeholder: "输入TAG",
- width: "500",
- tags: true, // 将Select2放入“标签'mode
- separator: ",", // 分隔符字符或字符串用来划定id
- multiple: "multiple",
- multiply: true, // 是否允许选择多个值
- data:data,
- initSelection: function (element, callback) {
- callback(data);// 默认选中
- },
- ajax: {
- url: "/e/extend/api/index.php?act=getTags",
- type:"POST",
- dataType: 'json',
- delay: 500,
- data: function (params) {
- return {
- q: params.term, // 将输入的字符传递到ajax中,q可以改为常用的变量名
- };
- },
- processResults: function (data, page) {
- // console.debug("ajax返回的对象是:")
- // console.debug(data.data)
- return {
- results: data.data
- };
- },
- cache: true
- },
- escapeMarkup: function (markup) {
- // console.debug(markup)
- return markup;
- }, // let our custom formatter work
- minimumInputLength: 1, // 最小数量的字符后才会去调用ajax
- maximumInputLength: 20, // 最大数量的字符后才会去调用ajax
- minimumResultsForSearch: 1, // 最小数量的结果
- templateResult: formatRepo3,
- // templateSelection: formatRepoSelection3
- }).val(dataArr3);
- $eventSelect3.on("change", function (e) {
- var data = '',dataArr = $eventSelect3.select2('data');
- $.each(dataArr,function(index, el) {
- data = data.length<1? data += el.text:data += ","+el.text;
- });
- // console.log($eventSelect3.select2('data'));
- console.log(data);
- $eventInfo3.val(data); // 获取选择的数据并放到要保存的元素中
- });
- /* 这里函数是用于查询到内容后,显示在select2的下拉框里面 */
- function formatRepo3 (repo) { //显示在select下拉框中的模板
- if (repo.loading) return repo.text;
- var markup = '<span>' + repo.text + '</span>';
- return markup;
- }
- </script>
2016.11.7 update
关于select2 api参数的文档
具体参数可以参考一下: 参数 |
类型 |
描述 |
Width |
字符串 |
控制 宽度 样式属性的Select2容器div |
minimumInputLength |
int |
最小数量的字符 |
maximumInputLength |
int |
最大数量的字符 |
minimumResultsForSearch |
Int |
最小数量的结果 |
maximumSelectionSize |
int |
可选择的最大条目数 |
placeholder |
字符串 |
选择初始值 |
separator |
字符串 |
分隔符字符或字符串用来划定id |
allowClear |
布尔 |
此选项只指定占位符 |
multiple |
布尔 |
Select2是否允许选择多个值 |
openOnEnter |
|
打开下拉如果设置为true,当用户按下回车键,Select2关闭。 默认情况下启用这个选项。 |
id |
函数 |
函数用于获取id从选择对象或字符串id存储代表的关键 |
matcher |
函数 |
用于确定是否搜索词匹配一个选项时使用一个内置的查询功能 |
sortResults |
函数 |
用于排序列表搜索之前显示的结果。 |
formatSelection |
函数 |
函数用于呈现当前的选择 |
formatResult |
函数 |
函数用来渲染结果, |
formatResultCssClass |
函数 |
函数用于添加css类结果元素 |
formatNoMatches |
字符串/函数 |
字符串包含“不匹配”消息,或 |
formatSearching |
字符串/函数 |
字符串包含“搜索… “消息,或 |
formatAjaxError |
字符串/函数 |
字符串包含消息“加载失败”,或 |
formatInputTooShort |
字符串/函数 |
包含“搜索”输入太短消息的字符串,或 |
formatInputTooLong |
字符串/函数 |
包含“搜索”输入太短消息的字符串,或 |
formatInputTooLong |
字符串/函数 |
包含“搜索输入字符串太长”消息,或 |
formatSelectionTooBig |
字符串/函数 |
字符串包含“你不能选择任何更多的选择”消息,或 |
formatLoadMore |
字符串/函数 |
字符串/函数 |
createSearchChoice |
函数 |
创建一个新的可选选择从用户的搜索词。 允许创建通过查询选择不可用 功能。 有用的用户可以创建动态的选择时,如“标签”usecase。 |
createSearchChoicePosition |
函数/字符串 |
定义的位置插入元素 |
initSelection |
函数 |
调用Select2创建允许用户初始化选择的值 select2附加到元素 |
tokenizer |
函数 |
记号赋予器函数可以处理后输入搜索框的输入每一个按键和提取 并选择选择。 |
tokenSeparators |
函数 |
一个字符串数组定义标记为默认的分隔符 分词器 功能。 默认情况下,此选项设置为一个空数组标记这意味着使用默认 编译器是禁用的。 通常是明智的,设置该选项值相似 [',',' '] 。 |
query |
函数 |
函数用于搜索词的查询结果。 |
ajax |
对象 |
选择内置的ajax查询功能。 这个对象作为快捷方式有手动编写一个函数,执行ajax请求。 内置函数支持更高级的特性,比如节流和无序的反应。 |
data |
数组/对象 |
择建在查询功能,使用数组。 |
tags |
数组/函数 |
将Select2放入“标签'mode,用户可以添加新的选择和预先存在的标签是通过提供 这个选项的属性是一个 数组 或者一个 函数 返回一个 数组的 对象 或 字符串 。 如果 字符串 而不是使用 对象 他们将有一个被转换成一个对象 id 和 文本 属性相等 的值 字符串 。 |
containerCss |
函数/对象 |
内联css将被添加到select2的容器。 一个对象包含css属性/值密钥对或一个函数,这个函数返回一个对象。 |
containerCssClass |
函数/字符串 |
Css类将被添加到select2容器的标签。 |
dropdownCss |
函数/对象 |
内联css将被添加到select2下拉的容器。 一个对象包含css属性/值密钥对或一个函数,这个函数返回一个对象。 |
dropdownCssClass |
函数/字符串 |
Css类将被添加到select2下拉的容器。 |
dropdownAutoWidth |
布尔 |
当设置为 真正的 尝试自动尺寸下拉基于内容的宽度。 |
adaptContainerCssClass |
函数 |
过滤器/重命名的css类,因为他们被复制从源标签select2容器标签 |
adaptDropdownCssClass |
函数 |
滤器/重命名的css类,因为他们被复制从源标签select2拉标签 |
escapeMarkup |
函数 |
函数用于后处理标记从格式化程序返回功能。 默认情况下这个功能转义的html实体,以防止javascript注入。 |
selectOnBlur |
布尔 |
设置为 真正的 如果你想要Select2选择当前高亮选项时模糊。 |
loadMorePadding |
整数 |
定义了多少像素需要加载下一页前折以下。 默认值是 0 这意味着结果列表需要滚动到下一个页面的底部加载的结果。 这个选项可以用来触发加载更快,可能导致更流畅的用户体验。 |
nextSearchTerm |
函数 |
函数用于确定下一个搜索词应该是什么 |