用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 11 Javascript
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
JavaScript学习笔记--常用的互动方法
Dec 07 Javascript
node.js中EJS 模板快速入门教程
May 08 Javascript
vue router使用query和params传参的使用和区别
Nov 13 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 Javascript
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
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
zf框架的校验器InArray使用示例
2014/03/13 PHP
Yii rules常用规则示例
2016/03/15 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
浅谈Python中数据解析
2015/05/05 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
python导入坐标点的具体操作
2019/05/10 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Python3远程监控程序的实现方法
2019/07/15 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
爽歪歪广告词
2014/03/20 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
团员自我评价范文
2015/03/10 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
党员转正申请报告
2015/05/15 职场文书
公司人力资源管理制度
2015/08/05 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书