前端插件一:jQuery Multi-Select多选插件

数据开
• 阅读 24014

项目

此项目是替换标准<select>(含有multiple属性的select标签)的一套交互友好的组件。

特点

  • 免费(基于WTFPL许可证)

  • 支持键盘操作

  • 提供一些回调函数

  • css完全自定义

  • 依赖jQuery 1.8以上版本

  • 总大小约8kb

简单使用

HTML

<html>
    <head>
        <link href='styles/multi-select/multi-select.css' rel='stylesheet'>
    </head>
    <body>
        <select multiple='multiple' id='my-select' name='my-select'>
            <option value='选项1'>选项1</option>
            <option value='选项2'>选项2</option>
            <option value='选项3'>选项3</option>
            <option value='选项4'>选项4</option>
            <option value='选项5'>选项5</option>
            <option value='选项6'>选项6</option>
            <option value='选项7'>选项7</option>
            <option value='选项8'>选项8</option>
        </select>
        <script src='scripts//jquery-1.11.2.min.js' type='text/javascript'></script>
            <script src='scripts/multi-select/jquery.multi-select.js' type='text/javascript'></script>
    </body>
</html>

JavaScript

$('#my-select').multiSelect();

选项

afterInit

类型:function
默认值:function(container){}
初始化multiSelect后执行的方法。

afterSelect

类型:function
默认值:function(values){}
选中选项后执行的方法。

afterDeselect

类型:function
默认值:function(values){}
取消选中后执行的方法。

selectableHeader

类型:HTML/Text
默认值:null
自定义可选区域header。

selectableFooter

类型:HTML/Text
默认值:null
自定义可选区域footer。

selectionHeader

类型:HTML/Text
默认值:null
自定义已选区域header。

selectionFooter

类型:HTML/Text
默认值:null
自定义已选区域footer。

disabledClass

类型:String
默认值:'disabled'
禁用状态选项的css class。

selectableOptgroup

类型:Boolean
默认值:false
为true时点击optgroup时等同于选中所有子选项。

keepOrder

类型:Boolean
默认值:false
为true时已选区域的选项根据选中顺序排序。

dblClick

类型:Boolean
默认值:false
为true时双击才会选中选项。

cssClass

类型:String
默认值:''
在multiselect容器(.ms-container)上添加自定义css class。

方法

.multiSelect(options)

初始化multi-select多选插件。

$('#my-select').multiSelect({});

.multiSelect('select', String|Array)

选中匹配值的一项或多项。

$('#my-select').multiSelect('select', '选项1');
$('#my-select').multiSelect('select', ['选项1', '选项3']);

.multiSelect('deselect', String|Array)

取消选中匹配值的一项或多项。

$('#my-select').multiSelect('deselect', '选项2');
$('#my-select').multiSelect('deselect', ['选项2', '选项4']);

.multiSelect('select_all')

选中所有选项。

$('#my-select').multiSelect('select_all');

.multiSelect('deselect_all')

取消选中所有选项。

$('#my-select').multiSelect('deselect_all');

.multiSelect('refresh')

刷新当前multi-select。

$('#my-select').multiSelect('refresh');

.multiSelect('addOption', Hash)

以键值对形式动态添加选项到multi-select。

key        类型        是否必填        描述
value      String      true           需添加的选项值
text       String      true           需添加的选项内容    
index      Number      false          选项插入到从0开始的第几个位置,默认追加在选项的末尾
nested     String      false          如果存在optgroup,选项可以插入到某一optgroup下
$('#my-select').multiSelect('addOption', { value: 'test', text: 'test', index: 0, nested: 'optgroup_label' });

键盘操作

key            作用
[ ↓ ]下        选择下一个选项
[ ↑ ]上        选择上一个选项
[ — ]空格      选中当前选择的选项
[ ← ]左        切换到上一区域
[ → ]右        切换到下一区域

Demo

HTML

<div class="form-group p-t-xs">
    <div class="row">
        <div class="col-sm-6 p-r-lg">
            <p class="text-size-md line-height-xl pull-left m-b-0">选择联系人</p>
            <button type="button" class="selectAll btn btn-link text-size-sm pull-right">全选</button>
        </div>
        <div class="col-sm-6 p-r-0">
            <button type="button" class="deselectAll btn btn-link text-size-sm pull-right">全选</button>
        </div>
    </div>
    <select id="optgroup" multiple="multiple">
        <option value="李一">李一</option>
        <option value="李二">李二</option>
        <option value="李三">李三</option>
        <option value="李四">李四</option>
        <option value="李五">李五</option>
        <option value="李六">李六</option>
        <option value="李七">李七</option>
        <option value="李八">李八</option>
        <option value="李九">李九</option>
        <option value="李十">李十</option>
    </select>
</div>

JavaScript

// 初始化
$('#optgroup').multiSelect({
    selectableHeader: '<i class="fa fa-search pull-right p-r-sm" style="position:relative;top:9px;z-index:1;"></i><input class="search-input col-sm-12 border text-size-sm p-r-xl" type="text" placeholder="已有联系人" style="border-bottom:0;border-radius:3px 3px 0 0;padding-top:3px;padding-bottom:3px;margin-top:-13px;">',
    selectionHeader: '<input class="col-sm-12 border bg-white text-size-sm" type="text" disabled placeholder="已选联系人" style="border-bottom:0;border-radius:3px 3px 0 0;padding-top:3px;padding-bottom:3px;">',
    selectableOptgroup: true,
    afterSelect: function (values) {
        select.modifyselectNum('#optgroup');
    },
    afterDeselect: function (values) {
        select.modifyselectNum('#optgroup');
    }
});

// 可选全选按钮
$('button.selectAll').click(function(){
    $(selectId).multiSelect('select_all');
    return false;
});

// 已选全选按钮
$('button.deselectAll').click(function(){
    $(selectId).multiSelect('deselect_all');
    return false;
});

// 搜索框实时查询
$('input.search-input').on('input propertychange', function() {
    var inputValue = $(this).val().trim();
    var $selections = $(selectId).siblings('.ms-container').find('.ms-selectable li.ms-elem-selectable');
    $selections.each(function () {
        var thisValue = $(this).children('span').text();
        if (thisValue.match(inputValue)) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
});

效果预览

前端插件一:jQuery Multi-Select多选插件

更多demo详见参考文档:http://loudev.com/

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Stella981 Stella981
4年前
JTopo + Vue 实现自定义拖拽流程图
JTopoVue实现自定义拖拽流程图市场上做流程图的插件比较多,这里介绍一种基于canvas编写的js插件,结合vue框架做出精美的流程图首先搭建vue框架,这里就不做介绍,由于jtopo官方demo里用到了jquery,所以我的项目里也引用了jquery插件,鉴于这里用到了很多的dom操作,所
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
4年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
4年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
数据开
数据开
Lv1
江山代有才人出,各领风骚数百年。
文章
4
粉丝
0
获赞
0