用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 getStyle获取最终样式函数代码
Apr 01 Javascript
node.js中的buffer.write方法使用说明
Dec 10 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
jquery+css3实现会动的小圆圈效果
Jan 27 Javascript
Angular工具方法学习
Dec 26 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
详解vue 单页应用(spa)前端路由实现原理
Apr 04 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
浅谈Fetch 数据交互方式
Dec 20 Javascript
详解Vue源码学习之双向绑定
Apr 10 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 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
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
简单的Python的curses库使用教程
2015/04/11 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
学生生病请假条范文
2014/02/16 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
双拥工作宣传标语
2014/06/26 职场文书
班级读书活动总结
2014/06/30 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
青年文明号汇报材料
2014/12/23 职场文书
离婚纠纷代理词
2015/05/23 职场文书
生活小常识广播稿
2015/08/19 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android