前端组件:支持多选,支持选项筛选的下拉框选择器(基于Jquery和Bootstrap)
效果图一:多选

效果图二:选项筛选

最后奉献源码,复制出来直接可用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>支持搜索选项和多选的下拉框</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<style>
.dropdown-menu {
overflow-x: visible;
overflow-y: auto;
max-height: 300px;
}
</style>
<body>
<ul class="nav navbar-nav" >
<li class="dropdown" >
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<b>位置:</b> 
<label id="selectPosition">选择</label><span class="caret"></span>
</a>
<ul id="select_item" class="dropdown-menu" > </ul>
</li>
</ul>
</body>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<script>
//设置搜索选项功能
var all_content = ['上面','aaa','cvb','dgf','gdf','dffh','erte','fdg','fghfg','erte','sdfs','gftjhgj']//选项
var select_item_obj = $("#select_item")//下拉框对象
select_item_obj.empty()
select_item_obj.append('<input id="input_search" class="select_search" type="text" class="input-sm" placeholder="搜索">')
for (let j = 0; j < all_content.length; j++) {
select_item_obj.append("<li class='select_item'><a href='#'>" + all_content[j] + "  <span class='glyphicon glyphicon-ok hidden' ></span></a></li>")
}
var input_search_obj = $("#input_search")//搜索框对象
//设置下拉框筛选事件
input_search_obj.on("propertychange input ", function () {
let search_msg = $(this).val()
select_item_obj.children('.select_item').each(function () {
$(this).remove()
})
if (search_msg != '') {
let select_content = []
for (let j = 0; j < all_content.length; j++) {
if (all_content[j].toLowerCase().indexOf(search_msg.toLowerCase()) >= 0) {
select_content.push(all_content[j])
}
}
console.log(select_content)
for (let j = 0; j < select_content.length; j++) {
select_item_obj.append("<li class='select_item'><a href='#'>" + select_content[j] + "  <span class='glyphicon glyphicon-ok hidden' ></span></a></li>")
}
} else {
for (let j = 0; j < all_content.length; j++) {
select_item_obj.append("<li class='select_item'><a href='#'>" + all_content[j] + "  <span class='glyphicon glyphicon-ok hidden' ></span></a></li>")
}
}
//将下拉框的值设置为显示的值,由于下拉框处于动态变化,所以必须放在变化最后的位置,才能保证全部的下拉框绑定事件
$('ul.dropdown-menu li.select_item').on('click', function (e) {
var ul_obj = $(this).parent()
var glyphicon_obj = $(this).children('a').children('span')
var glyphicon_class = glyphicon_obj.attr('class')
if (glyphicon_class == 'glyphicon glyphicon-ok') {
glyphicon_obj.attr('class', 'glyphicon glyphicon-ok hidden')
} else {
glyphicon_obj.attr('class', 'glyphicon glyphicon-ok')
}
var label_val = ''
ul_obj.find('li').each(function () {
var select_falg = $(this).children('a').children('span')
var now_obj = $(this)
if (select_falg.attr('class') == 'glyphicon glyphicon-ok') {
label_val += $.trim(now_obj.text()) + ','
}
})
console.log(label_val)
if (label_val == '') {
label_val = '选择'
}
$(this).parent().prev().children('label').text($.trim(label_val))
$(this).parent().prev().children('label').val($.trim(label_val))
e.stopPropagation();
})
})
//将下拉框的值设置为显示的值,由于下拉框处于动态变化,所以必须放在变化最后的位置,才能保证全部的下拉框绑定事件
$('ul.dropdown-menu li.select_item').on('click', function (e) {
var ul_obj = $(this).parent()
var glyphicon_obj = $(this).children('a').children('span')
var glyphicon_class = glyphicon_obj.attr('class')
if(glyphicon_class=='glyphicon glyphicon-ok'){
glyphicon_obj.attr('class','glyphicon glyphicon-ok hidden') }else{
glyphicon_obj.attr('class','glyphicon glyphicon-ok')
}
var label_val = ''
ul_obj.find('li').each(function () {
var select_falg = $(this).children('a').children('span')
var now_obj = $(this)
if(select_falg.attr('class')=='glyphicon glyphicon-ok'){
label_val += $.trim(now_obj.text())+','
}
})
console.log(label_val)
if(label_val==''){label_val='选择'}
$(this).parent().prev().children('label').text($.trim(label_val))
$(this).parent().prev().children('label').val($.trim(label_val))
e.stopPropagation();
})
//阻断li的点击事件
$(".select_search").on('click', function (e) {
e.stopPropagation();
});
</script>
</html>
前端组件:支持多选,支持选项筛选的下拉框选择器(基于Jquery和Bootstrap)的更多相关文章
- 前端 HTML form表单标签 select标签 option 下拉框
<select></select> select里面通常跟option配合使用 <!DOCTYPE html> <html lang="en&quo ...
- 使用jquery-combobox实现select下拉框多选之后,如何将下拉框的值传给input隐藏域
我在之前的一篇博文中eaeyui-combobox实现组合查询(即实现多个值得搜索)地址:http://www.cnblogs.com/dushan/p/4778897.html 实现了select下 ...
- 自绘制HT For Web ComboBox下拉框组件
传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HTforWeb通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在文本框和下拉列表中添加自定义的小图标,让整个 ...
- 由于抽签HT For Web ComboBox下拉框组件
传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT for Web通用组件中ComboBox不仅可以实现传统HTML5下拉框效果,并且可以在文本框和下拉列表中加入自己定义的小图标, ...
- query多选下拉框插件 jquery-multiselect(修改)
其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...
- MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...
- MVC实现多选下拉框,保存并显示多选项
在"MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来. 模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽 ...
- Android学习使用基本界面组件(下拉框,单选框,复选框,数字转轮,滚动条)
(一)建立单选框按钮 RadioGroup和RadioButton建立单选框按钮 字符串资源文件: <resources> <string name="app_name&q ...
- jq插件又来了,模拟select下拉框,支持上下方向键哦
好久没来了,更新下插件, 这个原理就是利用的 input[type='hidden']和自定义属性data-value捆绑传值操作的,可是设置默认选项,回调等参数,代码不多,比较简单,吼吼 (func ...
随机推荐
- WEBMIN(CVE-2019-15107) 学习
简单介绍: Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作.目前Webmin支持绝大多数的Unix系统,这些系统除了 ...
- Springboot:logback日志管理(九)
Springboot默认使用的日志框架就是logback 创建自定义的logback-spring.xml放在resources类目录下即可 logback-spring.xml: <?xml ...
- 使用RNN对文本进行分类实践电影评论
本教程在IMDB大型影评数据集 上训练一个循环神经网络进行情感分类. from __future__ import absolute_import, division, print_function, ...
- Docker help详细帮助
常用的 docker 命令 docker # docker 命令帮助 Commands: attach Attach to a running container # 当前 shell 下 attac ...
- React Native 在 Airbnb 的起起落落
写在前面 Airbnb 早在 2016 年就上了 React Native 大船,是很具代表性的先驱布道者: In 2016, we took a big bet on React Native. T ...
- vue 开发规范
本文档为前端 vue 开发规范 规范目的 命名规范 结构化规范 注释规范 编码规范 CSS 规范 规范目的 为提高团队协作效率 便于后台人员添加功能及前端后期优化维护 输出高质量的文档 命名规范 为了 ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十(四十六)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 源码学习VUE之Observe
在文章 源码学习VUE之响应式原理我们大概描述了响应式的实现流程,主要写了observe,dep和wather的简易实现,以及推导思路.但相应代码逻辑并不完善,今天我们再来填之前的一些坑. Obser ...
- Kubernetes-在Kubernetes集群上搭建HBase集群
经过3天的努力,终于在Kubernetes上把HBase集群搭建起来了,搭建步骤如下. 创建HBase镜像 配置文件包含core-site.xml.hbase-site.xml.hdfs-site ...
- 解决Visual Studio (VS) 插件下载缓慢
1.关闭IPV6协议 因为如果都支持IPV6协议,会自动使用IPV6下载扩展. 因为IPV6还没有建立完善,所以可能会比较慢. 百度经验:怎样关闭IPV6协议 2.给IPV6添加DNS 百度: 240 ...