用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 相关文章推荐
使用jQuery的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
JS高级笔记
Jul 13 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
为jquery的ajaxfileupload增加附加参数的方法
Mar 04 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
Vue.js组件通信的几种姿势
Oct 23 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
js对象简介与基本用法示例
Mar 13 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中ob_start函数的使用说明
2013/11/11 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python实现实时视频流播放代码实例
2020/01/11 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python如何将图片转换素描画
2020/09/08 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
2014年国庆节寄语
2014/09/19 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
宣传稿格式范文
2015/07/23 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
详解python网络进程
2021/06/15 Python
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
Python OpenCV之常用滤波器使用详解
2022/04/07 Python