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 相关文章推荐
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 Javascript
用JS判断IE版本的代码 超管用!
Aug 09 Javascript
range 标准化之获取
Aug 28 Javascript
客户端js性能优化小技巧整理
Nov 05 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
原生js实现放大镜
Feb 20 Javascript
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
VUE+node(express)实现前后端分离
Oct 13 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中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
php pdo操作数据库示例
2017/03/10 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
python使用webbrowser浏览指定url的方法
2015/04/04 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
小区文明倡议书
2014/05/16 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
python 对图片进行简单的处理
2021/06/23 Python
php去除数组中为0的元素的实例分析
2021/11/17 PHP