用jQuery实现可输入多选下拉组合框实例代码


Posted in Javascript onJanuary 18, 2017

【写在前面的话】网站上很多用各种插件,比如依赖bootstrap的bootstrap-select插件等。虽然这些框架可以实现很多功能,但因为在实际项目中,可能只会用到其中的某个功能,若是一概引入,会导致整个js加载过于笨重。比如前面提到的bootstrap-select插件,在不压缩的情况下,达到300多k。因此,为了实现一个可填写的下拉框有点得不偿失。

基于这种原因,于是私下用jquery写了一个比较简单的多选下拉可填写组合框。

container{
   margin: 20px auto;
   padding:0 15px;
   width: 50%; 
   height:300px;
   box-sizing: border-box;  
  }
  .text-container{
   display: inline-block;
   float:left;
   width: 15%;
   height: 32px;
   line-height: 32px;
   box-sizing: border-box;
  }
  .selectContainer{
   width: 70%;
   height:200px;
   float:left;
   position: relative;
   padding:0;
   margin:0;
   box-sizing: border-box;
  }
  .selectedContent{
   width:85%;
   height: 25px;
   float:left;   
  }
  .dropDown-toggle{
   width:14%;
   height:31px;
   line-height: 31px;
   text-align: center;
   border: 1px solid silver;
   border-left:none;
   float:left;
   padding:0;
   margin:0;
   box-sizing: border-box;
   cursor: pointer;
  }
  .dropDown-menu{
   margin:0;
   padding:0 15px 10px;
   width:100%;
   border:1px solid silver;
   border-top: none;
   box-sizing: border-box;
   list-style: none;
   position: absolute;
   top:31px;
   right:0;
  }
  .items{
   margin-top:8px;
   padding: 2px;
   cursor: pointer;
  }
  .items:hover{
   background: #ddd;
  }
  .isSelectedText{
   display: inline-block;
   width:90%;
  }
  .dsn{
   display: none;
  }
<div class="container">
 <span class="text-container">最爱的水果</span>
 <div class="multipleSelect selectContainer">
  <input type="text" class="selectedContent">
  <div class="dropDown-toggle">选择</div>
  <ul class="dropDown-menu dsn">
   <li class="items">
    <span class="isSelectedText">苹果</span>
    <span class="isSelected"><input type="checkbox"></span>
   </li>
   <li class="items">     
    <span class="isSelectedText">梨</span>
    <span class="isSelected"><input type="checkbox"></span>
   </li>
   <li class="items">
    <span class="isSelectedText">橘子</span>
    <span class="isSelected"><input type="checkbox"></span>
   </li>
   <li style="text-align: right">
    <button type="button" class="confirmSelect">确定</button>
   </li>
  </ul>
 </div>
</div>
$('.isSelected input[type=checkbox]').on('click', function(){
   var selectedItems = $(this).parents('.dropDown-menu').prevAll('.selectedContent').val().split(' ');
   var thisItem = $(this).parent().prev().text();
   var isExisted = 0;
   var isChecked = $(this).is(':checked');
   if(isChecked){
    selectedItems.map(function(item, index){
     if(item === thisItem){
      isExisted++
     }
    });
    if(!isExisted){
     selectedItems.push(thisItem)
    }
   }
   else{
    selectedItems.map(function(item, index){
     if(item === thisItem){
      selectedItems.splice(index, 1);
     }
    });
   }
   $(this).parents('.dropDown-menu').prevAll('.selectedContent').val(selectedItems.join(' '));
  })
  $('.confirmSelect').on('click', function(){
   $(this).parents('.dropDown-menu').addClass('dsn');
  })
  $('.dropDown-toggle').on('click', function(){
   $(this).next().toggleClass('dsn')
  });

由于本组件中使用了数组的map方法,可能此方法在ie中不能兼容。由于鄙人电脑ie无法打开,用360浏览器测试后同样可是正常使用。

Javascript 相关文章推荐
javascript 写类方式之一
Jul 05 Javascript
js简单实现HTML标签Select联动带跳转
Oct 23 Javascript
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
JavaScript实现的购物车效果可以运用在好多地方
May 09 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
轮播图组件js代码
Aug 08 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
vue使用vue-cli快速创建工程
Jul 28 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 #Javascript
微信小程序实现图片预加载组件
Jan 18 #Javascript
JavaScript原生节点操作小结
Jan 17 #Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 #Javascript
easyUI combobox实现联动效果
Jan 17 #Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 #Javascript
React Router基础使用
Jan 17 #Javascript
You might like
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
php动态生成JavaScript代码
2009/03/09 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
JavaScript基本对象
2007/01/11 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
清除输入框内的空格
2016/12/21 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
使用微信SDK自定义分享的方法
2019/07/03 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python多线程下载文件的方法
2015/07/10 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
《都江堰》教学反思
2014/02/07 职场文书
2014年高考决心书
2014/03/11 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
教师节主题班会方案
2015/08/17 职场文书
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技