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原始碼主頁: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
});
});
其他效果的程式碼就不一一展示了,程式碼很簡單,看看文件基本沒啥問題。
四、總結
以上就是兩種多選元件的效果展示以及簡單的程式碼示例。至於哪種更好全憑園友們自己的感覺,使用起來都挺簡單,功能基本類似。原始碼下載