用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 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
AngularJS入门教程(一):静态模板
Dec 06 Javascript
JS实现点击按钮获取页面高度的方法
Nov 02 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
three.js实现围绕某物体旋转
Jan 25 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
Jul 31 Javascript
layui树形菜单动态遍历的例子
Sep 23 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 编程安全性小结
2010/01/08 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
关于 angularJS的一些用法
2017/11/29 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Django之路由层的实现
2019/09/09 Python
学校学习雷锋活动总结
2014/07/03 职场文书
超市理货员岗位职责
2014/07/04 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
全陪导游词开场白
2015/05/29 职场文书
《包身工》教学反思
2016/02/23 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
python随机打印成绩排名表
2021/06/23 Python
mysql主从复制的实现步骤
2021/10/24 MySQL
AngularJS实现多级下拉框
2022/03/25 Javascript
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
JavaScript中reduce()的用法
2022/05/11 Javascript
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android