1. 程式人生 > >JS元件系列——兩種bootstrap multiselect元件大比拼[轉載]

JS元件系列——兩種bootstrap multiselect元件大比拼[轉載]

轉載原文地址:https://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

原始的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不想要預設的初始值,可以在初始化的時候去設定他們的值。如下是原始碼裡面的預設引數列表。

image

下面是博主從文件裡面截選出來的一些自認為比較重要的引數說明:(轉載至文件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)最原始的樣子

     image

image

image

  • (2)單選

image

  • (3)預設選中和禁用

image

  • (4)分組摺疊和展開

image

image

  • (5)初始化控制元件選中和未選中的值

image

image

  • (6)搜尋過濾功能

image

image

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
    });
});

其他效果的程式碼就不一一展示了,程式碼很簡單,看看文件基本沒啥問題。

四、總結

 以上就是兩種多選元件的效果展示以及簡單的程式碼示例。至於哪種更好全憑園友們自己的感覺,使用起來都挺簡單,功能基本類似。原始碼下載