用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 相关文章推荐
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
浅析js中2个等号与3个等号的区别
Aug 06 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
原生js简单实现放大镜特效
May 16 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
Feb 25 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
mysql 搜索之简单应用
2007/04/27 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
js实现抽奖效果
2017/03/27 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
python2 与python3的print区别小结
2018/01/16 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python 将md5转为16字节的方法
2018/05/29 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
项目合作意向书模板
2014/07/29 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
2015年组织部工作总结
2015/04/03 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记
ant design charts 获取后端接口数据展示
2022/05/25 Javascript