用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 相关文章推荐
斜45度寻路实现函数
Aug 20 Javascript
理解Javascript_13_执行模型详解
Oct 20 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
Javascript 按位左移运算符使用介绍(
Feb 04 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
Javascript前端经典的面试题及答案
Mar 14 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 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
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP代码优化的53个细节
2014/03/03 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
JS验证不重复验证码
2017/02/10 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
vue3.0 上手体验
2020/09/21 Javascript
Python实现的概率分布运算操作示例
2017/08/14 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
tensorflow 模型权重导出实例
2020/01/24 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
高校毕业生登记表自我鉴定
2013/11/03 职场文书
企业项目策划书
2014/01/11 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
会计试用期自我评价
2015/03/10 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫