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 相关文章推荐
TopList标签和JavaScript结合两例
Aug 12 Javascript
JS 显示当前日期与时间的代码
Mar 24 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
jQuery LigerUI 使用教程入门篇
Jan 18 Javascript
图片轮换效果实现代码(点击按钮停止执行)
Apr 12 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
JavaScript中textRange对象使用方法小结
Mar 24 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
Oct 14 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
vue.js中$set与数组更新方法
Mar 08 Javascript
jQuery 淡入/淡出效果函数用法分析
May 19 jQuery
vue实现移动端触屏拖拽功能
Aug 21 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 闭包特性在实际应用中的问题
2009/10/30 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python制作爬虫采集小说
2015/10/25 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
什么是servlet
2012/05/08 面试题
行政专员岗位职责
2014/01/02 职场文书
生日庆典策划方案
2014/06/02 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
python获取对象信息的实例详解
2021/07/07 Python