用jquery实现可输入多选下拉组合框

  【写在前面的话】网站上很多用各种插件,比如依赖bootstrap的bootstrap-select插件等。虽然这些框架可以实现很多功能,但因为在实际项目中,可能只会用到其中的某个功能,若是一概引入,会导致整个js加载过于笨重。比如前面提到的bootstrap-select插件,在不压缩的情况下,达到300多k。因此,为了实现一个可填写的下拉框有点得不偿失。

  基于这种原因,于是私下用jquery写了一个比较简单的多选下拉可填写组合框。  

CSS Code: 1         container{
 2             margin: 20px auto;
 3             padding:0 15px;
 4             width: 50%;
 5             height:300px;
 6             box-sizing: border-box;
 7         }
 8         .text-container{
 9             display: inline-block;
10             float:left;
11             width: 15%;
12             height: 32px;
13             line-height: 32px;
14             box-sizing: border-box;
15         }
16         .selectContainer{
17             width: 70%;
18             height:200px;
19             float:left;
20             position: relative;
21             padding:0;
22             margin:0;
23             box-sizing: border-box;
24         }
25         .selectedContent{
26             width:85%;
27             height: 25px;
28             float:left;
29         }
30         .dropDown-toggle{
31             width:14%;
32             height:31px;
33             line-height: 31px;
34             text-align: center;
35             border: 1px solid silver;
36             border-left:none;
37             float:left;
38             padding:0;
39             margin:0;
40             box-sizing: border-box;
41             cursor: pointer;
42         }
43         .dropDown-menu{
44             margin:0;
45             padding:0 15px 10px;
46             width:100%;
47             border:1px solid silver;
48             border-top: none;
49             box-sizing: border-box;
50             list-style: none;
51             position: absolute;
52             top:31px;
53             right:0;
54         }
55         .items{
56             margin-top:8px;
57             padding: 2px;
58             cursor: pointer;
59         }
60         .items:hover{
61             background: #ddd;
62         }
63         .isSelectedText{
64             display: inline-block;
65             width:90%;
66         }
67         .dsn{
68             display: none;
69         }
70     
HTML Code: 1 <div class="container">
 2     <span class="text-container">最爱的水果</span>
 3     <div class="multipleSelect selectContainer">
 4         <input type="text" class="selectedContent">
 5         <div class="dropDown-toggle">选择</div>
 6         <ul class="dropDown-menu dsn">
 7             <li class="items">
 8                 <span class="isSelectedText">苹果</span>
 9                 <span class="isSelected"><input type="checkbox"></span>
10             </li>
11             <li class="items">
12                 <span class="isSelectedText">梨</span>
13                 <span class="isSelected"><input type="checkbox"></span>
14             </li>
15             <li class="items">
16                 <span class="isSelectedText">橘子</span>
17                 <span class="isSelected"><input type="checkbox"></span>
18             </li>
19             <li style="text-align: right">
20                 <button type="button" class="confirmSelect">确定</button>
21             </li>
22         </ul>
23     </div>
24 </div>
JavaScript Code: 1 $(‘.isSelected input[type=checkbox]‘).on(‘click‘, function(){
 2             var selectedItems = $(this).parents(‘.dropDown-menu‘).prevAll(‘.selectedContent‘).val().split(‘ ‘);
 3             var thisItem = $(this).parent().prev().text();
 4             var isExisted = 0;
 5             var isChecked = $(this).is(‘:checked‘);
 6             if(isChecked){
 7                 selectedItems.map(function(item, index){
 8                     if(item === thisItem){
 9                         isExisted++
10                     }
11                 });
12                 if(!isExisted){
13                     selectedItems.push(thisItem)
14                 }
15             }
16             else{
17                 selectedItems.map(function(item, index){
18                     if(item === thisItem){
19                         selectedItems.splice(index, 1);
20                     }
21                 });
22             }
23             $(this).parents(‘.dropDown-menu‘).prevAll(‘.selectedContent‘).val(selectedItems.join(‘ ‘));
24         })
25         $(‘.confirmSelect‘).on(‘click‘, function(){
26             $(this).parents(‘.dropDown-menu‘).addClass(‘dsn‘);
27         })
28         $(‘.dropDown-toggle‘).on(‘click‘, function(){
29             $(this).next().toggleClass(‘dsn‘)
30         });

  由于本组件中使用了数组的map方法,可能此方法在ie中不能兼容。由于鄙人电脑ie无法打开,用360浏览器测试后同样可是正常使用。

  请大家多多指教。

时间: 2024-10-29 19:11:15

用jquery实现可输入多选下拉组合框的相关文章

Jquery ajax 绑定multiselect多选下拉选项,同时异步执行返回值

Jquery ajax 绑定multiselect多选下拉选项,同时异步执行获取返回值 1 function load(mslt_employees,belongto,mark) {//传入$(#ID) 2 var jsondata = JSON.stringify({ belongto: 1, username: username }); 3 var emp = null; 4 jQuery.ajax({ 5 type: 'POST', 6 url: "../tools/employees_a

CSS3+Jquery实现带动画效果的下拉选择框

CSS3+JQuery实现带动画效果的下拉选择框. 元素结构为: 1 <div class="box"> 2 <p>this is the first li</p> 3 <div id="blank"></div> 4 <ul> 5 <li class="selected">this is the first li</li> 6 <li >

兼容ie8的多选下拉选择框

说下写这个东东的原因:最近要写一个兼容ie8的项目,我一出来工作就是数据驱动的框架了.所以对不支持vue的ie8.真的是脑壳疼. 最后考察了一番,决定使用 layui这个官网宣城兼容人类正在使用的全部浏览器(IE6/7除外)的Ui 刚开始用着,好像也是挺香的,相对于其他兼容ie8的ui,各方面都好很多. 慢慢的,蛋疼的时候来了,就是layui的多选下拉对ie8不支持. 接着,就开始百度各种多选下拉插件(还是懒啊,啥都想用现成的),耗费大量精力测试修改,都不尽人意,好多都是标题单,宣称支持ie8,

ObjectARX对话框添加颜色下拉组合框

建立Arx基本对话框,最好是基于CAcUidialog类. 首先添加combox控件更改一下属性: 先修改Owner Draw为Fixed,再更改Has Strings 为true Has Strings 如果不设置,文字会是乱码, 更改Type为Drop List 再添加对话框的变量. 添加这个控件的变量,设置如下图: 完成效果: ps:我的是基于vs2010+arx2012wizard, 对于添加变量这个对话框,如果没有CAcUi系列类型,直接输入即可.或者参考我的另一篇博文修改一下添加变量

objectARX 添加线型下拉组合框空间 CAcUiLineTypeComboBox

不知道是有意还是无意,objectARX的所有文档中,居然没有CAcUiLineTypeComboBox, 而实际上这个是存在的.位于\inc\acuiComboBox.h 而在添加变量的向导中也没有这个类型. 现在我们来修复这个功能.. 打开C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxMemVariableWiz\HTML\1033 或者C:\Program Files(x86)\Autodesk\Object

自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选&amp;多选下拉框

先说点闲话,熟悉Angular的猿们会喜欢这个插件的. 00.本末倒置 不得不承认我是一个喜欢本末倒置的人,学生时代就喜欢先把晚交的作业先做,留着马上就要交的作业不做,然后慢悠悠做完不重要的作业,卧槽,XX作业马上要交了,赶紧补补补.如今做这个项目,因为没找到合适的多选下拉Web插件,又不想用html自带的丑陋的<select multiple></select>,自己花了一整天时间做了一个.或许这样占用的主要功能开发的时间,开发起来会更有紧迫感吧.感觉自己是个抖M自虐倾向,并且伴

页面多选下拉框 jquery.multiple.select

1.首先引用jquery.multiple.select.js.multiple-select.css 2.在页面select下拉列表里面加一个multiple="multiple" <select name="nimbusHost" id="nimbusHost" multiple="multiple"> <c:forEach items="${stormIps}" var="

query多选下拉框插件 jquery-multiselect(修改)

其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介绍已经比较详细了,尤其是第二个有扩展MyValues函数,只是扩展有些bug,这里我在提出一些我的扩展,我们应该把multiValues属性定义在options里面,让每个multiselect控件都有自己的multiValues属性.我这里还需要一个获取text的方法.有关Myvalues和Myt

MVC实现多选下拉框

借助Chosen Plugin可以实现多选下拉框. 选择多项: 设置选项数量,比如设置最多允许2个选项: 考虑到多选下拉<select multiple="multiple"...></select>选中项是string数组,Model应该这样设计: using System.Collections.Generic; using System.Web.Mvc; namespace MvcApplication1.Models { public class Car