用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中的end()使用方法
Jul 10 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
Aug 22 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
JavaScript运行原理分析
Feb 09 Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
如何让vue长列表快速加载
Mar 29 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
php 验证码制作(网树注释思想)
2009/07/20 PHP
php5 图片验证码实现代码
2009/12/11 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
心扬JS分页函数代码
2010/09/10 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
javascript实现微信分享
2014/12/23 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
Vue插槽原理与用法详解
2019/03/05 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
Python最小二乘法矩阵
2019/01/02 Python
python3人脸识别的两种方法
2019/04/25 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
优质的学校老师推荐信
2013/10/28 职场文书
应届生自我鉴定
2013/12/11 职场文书
环保倡议书400字
2014/05/15 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
超市工作总结范文2014
2014/12/19 职场文书
先进党支部事迹材料
2014/12/24 职场文书
国庆节慰问信
2015/02/15 职场文书
信访维稳承诺书
2015/05/04 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript