JS组件系列——两种bootstrap multiselect组件大比拼

原文:http://www.cnblogs.com/landeanfen/p/5013452.html

前言:今天继续来看看bootstrap的另一个组件:multiselect。记得在项目开始之前,博主项目组几个同事就使用哪些js组件展开过讨论,其中就说到了select组件,由于项目的整体风格使用的bootstrap风格,所以在选用select组件的时候优先考虑和bootstrap结合使用的。其中就找到了两个这种组件,大体样式和功能基本相同,经过一番讨论,项目组决定使用davidstutz的bootstrap-multiselect 组件,今天就来看看这两个组件的用法。

一、组件说明以及API

1、第一个组件是写bootstrap table的主人公wenzhixin封装的一个组件——multiple-select。这个组件风格简单、文档全、功能强大。但是觉得它选中的效果不太好。关于它的效果展示,我们放在后面。还是给出对应的文档API。

Multiple-Select源码主页:https://github.com/wenzhixin/multiple-select

Multiple-Select文档以及Demo:http://wenzhixin.net.cn/p/multiple-select/docs/index.html?locale=zh_CN

2、第二个组件也是在github上面找的——bootstrap-multiselect。这个组件风格和第一个非常相似,文档也挺全面。

bootstrap-multiselect源码主页:https://github.com/davidstutz/bootstrap-multiselect

bootstrap-multiselect文档以及Demo:http://davidstutz.github.io/bootstrap-multiselect/

二、Multiple-select组件

1、组件说明

这个组件需要的浏览器支持如下:

  • IE 7+
  • Chrome 8+
  • Firefox 10+
  • Safari 3+
  • Opera 10.6+

还好,一般主流的浏览器都能够支持。

2、效果预览

(1)原始的MultiSelect

(2)初始化的Multiple Select

(3)设置选中和禁用

(4)设置分组

(5)设置未选中的初始值:请选择

(6)初始化成单选

(7)设置组件的筛选功能

3、代码示例

既然是bootstrap的组件,肯定需要bootstrap的支持。我们来看看需要引用的js

    @*Jquery*@
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>

    @*bootstrap*@
    <script src="~/Content/bootstrap/js/bootstrap.min.js"></script>
    <link href="~/Content/bootstrap/css/bootstrap.min.css" rel="stylesheet" />

    @*multiple-select*@
    <script src="~/Content/multiselect_wenzhixin/multiple-select-master/multiple-select.js"></script>
    <link href="~/Content/multiselect_wenzhixin/multiple-select-master/multiple-select.css" rel="stylesheet" />

    @*页面js*@
    <script src="~/Scripts/Home/Index_wenzhixin.js"></script>

(1)原始的初始化

               <label class="control-label col-xs-1" for="sel_search_orderstatus">多选站点</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus" style="width:150px" multiple="multiple">
                                <option value="0">未排产</option>
                                <option value="5">已排产</option>
                                <option value="10">已锁定</option>
                                <option value="25">在制</option>
                                <option value="20">订单提交</option>
                                <option value="30">订单删除</option>
                                <option value="50">订单报废</option>
                            </select>
                        </div>

$(function () {
    $(‘#sel_search_orderstatus‘).multipleSelect();
})

(2)设置选中和禁用

              <label class="control-label col-xs-1" for="sel_search_orderstatus2">disabled Select</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus2" style="width:150px" multiple="multiple">
                               ......
                            </select>
                        </div>
$(function () {
    $(‘#sel_search_orderstatus2‘).multipleSelect();
})

(3)设置分组和初始值

              <label class="control-label col-xs-1" for="sel_search_orderstatus3">分组</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus3" style="width:150px" multiple="multiple">
                                <optgroup label="未上线">
                                    <option value="0">未排产</option>
                                </optgroup>
                                <optgroup label="已上线">
                                    <option value="5">已排产</option>
                                    <option value="10">已锁定</option>
                                    <option value="25">在制</option>
                                    <option value="20">订单提交</option>
                                </optgroup>
                                <optgroup label="异常">
                                    <option value="30">订单删除</option>
                                    <option value="50">订单报废</option>
                                </optgroup>
                            </select>
                        </div>

$(function () {
    $(‘#sel_search_orderstatus3‘).multipleSelect({
        placeholder: "请选择"
    });
})

(4)单选

              <label class="control-label col-xs-1" for="sel_search_orderstatus4">单选</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus4" style="width:150px" multiple="multiple">
                                .......
                            </select>
                        </div>
$(function () {
    $(‘#sel_search_orderstatus4‘).multipleSelect({
        placeholder: "请选择",
        single: true
    });
})

(5)筛选

              <label class="control-label col-xs-1" for="sel_search_orderstatus5">筛选</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus5" style="width:150px" multiple="multiple">
                                ......
                            </select>
                        </div>
$(function () {
    $(‘#sel_search_orderstatus5‘).multipleSelect({
        placeholder: "请选择",
        filter: true
    });
})

(6)更多参数:如果园友们有兴趣,可以看看源码里面的所有参数,虽然没有中文详解,但是根据英文的大概意思就能知道是干什么用的,如果你的multiple select不想要默认的初始值,可以在初始化的时候去设置他们的值。如下是源码里面的默认参数列表。

下面是博主从文档里面截选出来的一些自认为比较重要的参数说明:(转载至文档http://wenzhixin.net.cn/p/multiple-select/docs/index.html?locale=zh_CN

  • isOpen

类型: boolean

是否打开下拉列表。

默认值为 false

  • placeholder

类型: string

显示默认的提示信息。

默认值为 ‘‘

  • selectAll

类型: boolean

是否显示全选复选框。

默认值为 true

  • selectAllText

类型: string

全选复选框的显示内容。

默认值为 Select all

  • multiple

类型: boolean

是否在一行中显示多个选项。

默认值为 false

  • multipleWidth

类型: integer

一行中每个选项的宽度。

默认值为 80

  • single

类型: boolean

是否只允许你选择一行。

默认值为 false

  • position

类型: string

定义下拉列表的位置,只能是 bottom 或者 top

默认值为 bottom.

  • filter

类型: boolean

是否开启过滤功能。

默认值为 false

  • width

类型: integer

定义下拉列表的宽度。

默认值为 undefined。 默认与 select 的宽度相同。

  • maxHeight

类型: integer

下拉列表的最大高度。

默认值为 250

(7)常用事件(转载至文档http://wenzhixin.net.cn/p/multiple-select/docs/index.html?locale=zh_CN

  • onOpen

当下拉列表被打开时触发。

  • onClose

当下拉列表被关闭时触发。

  • onCheckAll

点击全选或者调用 “checkall” 方法时触发。

  • onUncheckAll

点击全不选或者调用 “uncheckall” 方法时触发。

  • onOptgroupClick

点击分组时触发。

  • onClick

点击一个复选框时触发

(8)常用方法(转载至文档http://wenzhixin.net.cn/p/multiple-select/docs/index.html?locale=zh_CN

  • getSelects

获取 Multiple Select 选择内容。

参数: type

类型: string

选择内容的类型,value 或者 text。

默认值为 value

  • setSelects

设置 Multiple Select 的内容。

参数: values

类型: array

选择框的内容信息。

  • enable

启用 Multiple Select。

  • disable

禁用 Multiple Select。在这种模式下,不允许用户操作。

  • checkAll

全选所有的复选框。

$(‘select‘).multipleSelect(‘checkAll‘);
  • uncheckAll

全不选所有的复选框。

$(‘select‘).multipleSelect(‘uncheckAll‘);
  • refresh

重新加载 Multiple Select。

假如你是通过 AJAX 或者 DOM 来手动添加或者删除 option 选项,可以通过 refresh 方法来重新加载 Multiple Select。

三、Bootstrap-multiselect组件

1、效果预览

(1)最原始的样子

(2)单选

(3)默认选中和禁用

(4)分组折叠和展开

(5)初始化控件选中和未选中的值

(6)搜索过滤功能

2、代码示例

初始化的过程和上面的类似,首先引用文件。

   <script src="~/Scripts/jquery-1.10.2.min.js"></script>

    <script src="~/Content/bootstrap/js/bootstrap.min.js"></script>
    <link href="~/Content/bootstrap/css/bootstrap.min.css" rel="stylesheet" />

    <script src="~/Content/multiselect_davidstutz/js/bootstrap-multiselect.js"></script>
    <link href="~/Content/multiselect_davidstutz/css/bootstrap-multiselect.css" rel="stylesheet" />

    <script src="~/Scripts/Home/Index_davidstutz.js"></script>

(1)最原始的初始化

                        <label class="control-label col-xs-1" for="sel_search_orderstatus">多选站点</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus" style="width:150px" multiple="multiple">
                                <option value="0">未排产</option>
                                <option value="5">已排产</option>
                                <option value="10">已锁定</option>
                                <option value="25">在制</option>
                                <option value="20">订单提交</option>
                                <option value="30">订单删除</option>
                                <option value="50">订单报废</option>
                            </select>
                        </div>

$(function () {
    $(‘#sel_search_orderstatus‘).multiselect();
});

(2)设置选中和禁用

              <label class="control-label col-xs-1" for="sel_search_orderstatus2">disabled Select</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus2" style="width:150px" multiple="multiple">
                                <option value="0">未排产</option>
                                <option value="5" selected="selected">已排产</option>
                                <option value="10" selected="selected">已锁定</option>
                                <option value="25" disabled="disabled">在制</option>
                                <option value="20" disabled="disabled">订单提交</option>
                                <option value="30" disabled="disabled" selected="selected">订单删除</option>
                                <option value="50">订单报废</option>
                            </select>
                        </div>

(3)分组

<label class="control-label col-xs-1" for="sel_search_orderstatus3">分组</label>
                        <div class="col-xs-2" style="margin-top:7px;">
                            <select id="sel_search_orderstatus3" style="width:150px" multiple="multiple">
                                <optgroup label="未上线">
                                    <option value="0">未排产</option>
                                </optgroup>
                                <optgroup label="已上线">
                                    <option value="5">已排产</option>
                                    <option value="10" selected="selected">已锁定</option>
                                    <option value="25" disabled="disabled">在制</option>
                                    <option value="20">订单提交</option>
                                </optgroup>
                                <optgroup label="异常">
                                    <option value="30">订单删除</option>
                                    <option value="50">订单报废</option>
                                </optgroup>
                            </select>
                        </div>

$(function () {
    $(‘#sel_search_orderstatus3‘).multiselect({
        enableCollapsibleOptGroups: true
    });
});

其他效果的代码就不一一展示了,代码很简单,看看文档基本没啥问题。

四、总结

以上就是两种多选组件的效果展示以及简单的代码示例。至于哪种更好全凭园友们自己的感觉,使用起来都挺简单,功能基本类似。源码下载

时间: 2024-10-12 18:57:17

JS组件系列——两种bootstrap multiselect组件大比拼的相关文章

JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

阅读目录 一.为什么组件很重要 二.Vue里面的组件基础知识 1.组件的概念 2.组件原理 3.组件使用 三.封装自己的Component 1.使用Component封装bootstrapTable 2.封装select 3.查看其他Vue框架源码 四.总结 正文 前言:转眼距离上篇 JS组件系列--又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue的发展也是异常迅猛,不过这好像和博

react学习笔记1之声明组件的两种方式

//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class Welcome extends React.Component{ render(){ return <h1>Hello, {this.props.name}</h1>; } } ReactDOM.render( <Welcome name="kevin"/&g

Button的Click事件与js函数的两种不同顺序触发方式

先执行js,或者先执行Click事件,最近就遇到了这个问题,开始弄了两个按钮分别执行,那才叫一个蛋疼... 1.先执行js,再执行Button的Click函数 <asp:Button ID="btn_delete" runat="server" Text="提交" onclick="button1_Click"/> 前台js为 <script language="javascript"&g

可拖动弹窗的JS和jQuery两种写法

最近在慕课网上学习了一个网页可拖动对话框js实现的演示视频,这个demo中的例子是百度首页登录按钮的弹窗,如下图: 当点击左上角的登录按钮时,弹窗出现并自动居中,同时窗口可拖动的范围被限制在了可视区域内,即浏览器视窗的上下左右边界,弹窗无法移出移动出四个边界,也不会出现滚动条. 另一个效果就是,当改变窗口大小时,对话框自动居中. 这个视频中用了原生js,jQuery两种写法实现案例,但本质上,对话框居中,限制拖动范围的的计算思路是一致的. 为了简化页面,总结核心思路,我重新写了一个小demo,界

react的组件的两种形式

1.如果需要传参,在函数中加一个props参数来接受,并且必须向外return一个合法的jsx创建的虚拟DOM. //1. 组件名首字母为大写 2. 必须return 合法的jsx// 这里就可以相当于子组件function Hellow (props){ //props为父组件传过来的数据 //如果打印props的话,只要子组件用的到东西都会打印出来,在这里没有用到父组件中的a数据,因此只会打印出前三个来. return <div> 姓名: {props.name}, 性别: {props.

vue学习之父子组件通信两种方法

初学vue,最常用及实用的就是父子组件之间的通信了,在此记录一点自己的学习过程 方法一:props及$emit 父组件中先引入子组件,然后components里面注册组件,然后template里调用,调用的时候通过v-bind传递值给子组件,v-on监听子组件$emit传递过来的值 子组件中先用props接收父组件的传值,注意子组件中不可直接修改父组件的传值,可通过watch监听来赋值,通过$emit来传递值给父组件 方法二:ref 父组件传值props方法不变,父组件可通过使用ref来调用子组

C#组件系列———又一款日志组件:Elmah的学习和分享

前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候都有大把的年终总结.回忆过去展望未来之类的文章.博主是没时间写总结了,要学的东西太多.关于Vue的系列一定要抽时间补上.最近刚用了一个日志组件Elmah,比较适合开发阶段异常信息的快速定位与追溯,有兴趣的跟着博主一起来看看吧. 本文原创地址:http://www.cnblogs.com/landea

跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)

1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现,现在所有支持JavaScript 的浏览器都会使用这个策略. 所谓同源,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可. 所谓同源策略,指的是浏览器对不同源的脚本或者文本的访问

JS里面的两种运动函数

最新学了一个新的运动函数,与最初学习的有所不同,第一个运动是根据运动速度完成运动 ,第二个则是根据运动的时间来完成运动,而且把之前的函数都进行了一些兼容处理,在这里列出了看一下: 第一种animate1 1 function animate1(obj,data,rate,fn){//运动对象,运动数据,[运动速度],[回调函数] 2 //遍历获取样式属性 3 for(var key in data){ 4 //通过闭包将key私有化 5 (function(k){ 6 /* 7 获得样式宽高等会