jQuery插件实现可输入和自动匹配的下拉框


Posted in Javascript onOctober 24, 2016

实现可输入+带自动匹配功能的下拉框,我试过以下几种方法:

1.直接使用h5的新标签<datalist>,对应demo如下:

<input list="browsers">
<datalist id="browsers">
 <option value="Internet Explorer">
 <option value="Firefox">
 <option value="Chrome">
 <option value="Opera">
 <option value="Safari">
</datalist>

优点:节约js代码;

缺点:IE 9及以下的IE浏览器 和 Safari 均不支持 <datalist> 标签(好像还有几个浏览器也不支持);重复点击输入框或者下拉图标并不能收回下拉列表;样式难以控制

2.使用基于jQuery的select2插件(需要同时引入select2.css和select2.js),html部分代码如下:

<select class="select2_test" >
 <option></option>
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
</select>

js部分代码如下:

$('.select2_test').select2({
 placeholder: "请选择所属选项",
 allowClear: true;
});

注意:与bootstrap的Modal模态框结合使用时,会出现下拉列表出现在遮罩层的底层和点击弹出框关闭按钮但下拉列表并没有消失的问题,找了半天原来问题出在select2.css这个样式表中,

原因:点击输入框,此插件会生成一个遮罩层(类名为.select2-drop-mask)和一个下拉列表(类名为.select2-drop),这两者的层叠性(z-index)依次为9991,9992,但是modal弹出框的层叠性大于10000,所以才会导致出现上述两个问题

解决办法:如果将.select2-drop-mask和.select2-drop的z-index分别提高到19991、19992,下拉列表成功显示在上面,但在打开了下拉列表的前提下点击modal弹出框的关闭按钮会先收回下拉框,再次点击才能关闭弹出窗,用户体验不是很好;这里可以尝试提高关闭按钮的z-index,前提一定要父元素不能是modal弹出框,否则其提高的z-index无效。

如果想更深入了解select2.js插件,可以参考https://3water.com/article/95561.htm

3.造成select2.js上述不适的主要原因在于.select2-drop的失去焦点是要点到select2-drop-mask上才能触发,为改善这种机制,这里推荐另一款基于jQuery的下拉搜索框插件magicsuggest(需要同时引入magicsuggest.css和magicsuggest.js),html部分很简单,直接就是:

<div id="magicsuggest"></div>

js部分代码如下:

$('#magicsuggest').magicSuggest({
placeholder:'',

allowFreeEntries: false,

maxSelection:1,

autoSelect:true,

valueField:"id",

displayField:"value",

resultAsString:true,

selectionStacked: true,

highlight:false,

data: ['Paris', 'New York', 'Gotham']
});

优点:不会出现层叠性冲突的问题;样式美观;允许多项选择

缺点:多余的样式较多(阴影、高亮、错误提示、多选),需要根据具体需要调整样式;不能直接通过$(this).val()来获取原输入框的值;数据量过大时加载会出现延迟

4.鉴于上面那个插件默认的是多选的样式,用到项目里也不能直接获取<select>标签里的值,这里我个人推荐chosen这款插件(需要同时引入chosen.css和chosen.js),html部分代码如下:

<select data-placeholder="Type 'C' to view" style="width:100%" class="myselect chosen-select-no-results" tabindex="10">
 <option value=""></option>
 <option>American Black Bear</option>
 <option>Asiatic Black Bear</option>
 <option>Brown Bear</option>
 <option>Giant Panda</option>
 <option>Sloth Bear</option>
 <option>Sun Bear</option>
 <option>Polar Bear</option>
 <option>Spectacled Bear</option>
</select>

 js部分代码如下:

var config = {
'.chosen-select':{},

'.chosen-select-deselect':{allow_single_deselect:true},

'.chosen-select-no-single':{disable_search_threshold:10},

'.chosen-select-no-results':{no_results_text:'Oops, nothing found!'},

'.chosen-select-width':{width:"95%"}
}
for (var selector in config) {

$(selector).chosen(config[selector]);
}

注意:如果与bootstrap的Modal模态框结合使用时,会出现下拉列表显示不出来, 同时.modal-body右侧出现滚动条,原因就在于bootstrap给.modal-body设置了一个overflow-y:auto的默认样式,所以解决办法就是给.modal-body添加一个overflow-y:visible的样式来覆盖它。

5.当然,实现相同功能的jQuery插件还有很多,具体可以参考http://www.cnblogs.com/lhb25/p/form-enhanced-with-javascript-three.html

如果大家还想深入学习,可以点击jquery下拉框效果汇总、JavaScript下拉框效果汇总进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个可以显示阴历的JS代码
Mar 05 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
js取模(求余数)隔行变色
May 15 Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
微信小程序实现打开内置地图功能【附源码下载】
Dec 07 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 Javascript
使用JS实现动态时钟
Mar 12 Javascript
JavaScript 对象创建的3种方法
Nov 17 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
Oct 24 #Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 #Javascript
js实现上传文件添加和删除文件选择框
Oct 24 #Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 #Javascript
第一次接触Bootstrap框架
Oct 24 #Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 #Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 #Javascript
You might like
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php页面缓存方法小结
2015/01/10 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Django自定义manage命令实例代码
2018/02/11 Python
python tkinter组件使用详解
2019/09/16 Python
python实现大学人员管理系统
2019/10/25 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python实现AdaBoost算法的示例
2020/10/03 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
物理教育专业毕业生推荐信
2013/11/03 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
求职自我推荐信
2014/06/25 职场文书
国际贸易实训报告
2014/11/05 职场文书
实习感想范文
2015/08/10 职场文书
单位病假条范文
2015/08/17 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL