1. 程式人生 > >JS元件系列——Bootstrap Select2元件使用小結

JS元件系列——Bootstrap Select2元件使用小結

前言:在介紹select元件的時候,博主之前分享過一篇JS元件系列——兩種bootstrap multiselect元件大比拼,這兩個元件的功能確實很強大,只可惜沒有圖文結合的效果(也就是將圖片放入到select裡面隨著文字一起顯示)。前兩天做一個選單圖示選擇的功能,就要用到這個圖文選擇的功能。於是乎又是找啊找。終於不負所望,找到了我們偉大的select2元件。今天分享下這個元件的一些用法和特性。

一、元件說明以及API說明

二、元件特性效果展示

一些通用的單選、多選、分組等功能這裡就不多做介紹了,multiselect這方面是強項。重點介紹下select2的一些特性效果:

1、多選效果

可以設定最多隻能選幾個

2、圖文結合的效果

3、遠端搜尋功能(即在使用者輸入搜尋內容時動態去後臺取資料)

輸入內容前

輸入空格搜尋出全部

滾動條滑動到底部自動載入剩餘項

輸入文字動態去後臺過濾

更高階的用法如:

其實使用起來也不難,就是一個拼html的過程。

三、程式碼示例

1、多選效果

select2的多選很簡單,設定一個屬性就好了。

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

    <script src="~/Content/bootstrap/js/bootstrap.js"
></script> <link href="~/Content/bootstrap/css/bootstrap.css" rel="stylesheet" /> <script src="~/Content/select2-master/dist/js/select2.js"></script> <link href="~/Content/select2-master/dist/css/select2.css" rel="stylesheet" />
  <select id="sel_menu2" multiple
="multiple" class="form-control"> <optgroup label="系統設定"> <option value="1">使用者管理</option> <option value="2">角色管理</option> <option value="3">部門管理</option> <option value="4">選單管理</option> </optgroup> <optgroup label="訂單管理"> <option value="5">訂單查詢</option> <option value="6">訂單匯入</option> <option value="7">訂單刪除</option> <option value="8">訂單撤銷</option> </optgroup> <optgroup label="基礎資料"> <option value="9">基礎資料維護</option> </optgroup> </select>
    //多選
    $("#sel_menu2").select2({
        tags: true,
        maximumSelectionLength: 3  //最多能夠選擇的個數
    });

2、圖文結合的效果

<select id="sel_menu" class="js-example-templating js-states form-control">
             <optgroup label="系統設定">
                 <option value="1">使用者管理</option>
                 <option value="2">角色管理</option>
                 <option value="3">部門管理</option>
                 <option value="4">選單管理</option>
             </optgroup>
             <optgroup label="訂單管理">
                 <option value="5">訂單查詢</option>
                 <option value="6">訂單匯入</option>
                 <option value="7">訂單刪除</option>
                 <option value="8">訂單撤銷</option>
             </optgroup>
             <optgroup label="基礎資料">
                 <option value="9">基礎資料維護</option>
             </optgroup>
         </select>
$(function () {
    //帶圖片
    $("#sel_menu").select2({
        templateResult: formatState,
        templateSelection: formatState
    });
});

function formatState(state) {
    if (!state.id) { return state.text; }
    var $state = $(
      '<span><img src="/content/images/' + state.element.value.toLowerCase() + '.ico" class="img-flag" /> ' + state.text + '</span>'
    );
    return $state;
};

3、遠端搜尋功能(即在使用者輸入搜尋內容時動態去後臺取資料)

 <select id="sel_menu3" class="js-data-example-ajax form-control">
      <option value="3620194" selected="selected">請選擇</option>
 </select>
$(function () {
    //遠端篩選
    $("#sel_menu3").select2({
        ajax: {
            url: "/Home/GetProvinces",
            dataType: 'json',
            delay: 250,
            data: function (params) {
                return {
                    q: params.term, // search term
                    page: params.page
                };
            },
            processResults: function (data, params) {
                params.page = params.page || 1;

                return {
                    results: data.items,
                    pagination: {
                        more: (params.page * 10) < data.total_count
                    }
                };
            },
            cache: true
        },
        escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
        minimumInputLength: 1,
        templateResult: formatRepoProvince, // omitted for brevity, see the source of this page
        templateSelection: formatRepoProvince // omitted for brevity, see the source of this page
    });
});
function formatRepoProvince(repo) {
    if (repo.loading) return repo.text;
    var markup = "<div>"+repo.name+"</div>";
    return markup;
}

這裡有要注意的一個地方就是processResults屬性對應的方法有一個more屬性用於是否分頁顯示的,這裡的值要和你需要一次顯示的值的條數匹配。

後臺對應的方法如下:

public List<string> lstProvince = new List<string>() {"北京市","天津市","重慶市","上海市","河北省","山西省","遼寧省","吉林省","黑龍江省","江蘇省","浙江省","安徽省","福建省","江西省","山東省","河南省","湖北省","湖南省","廣東省","海南省","四川省","貴州省","雲南省","陝西省","甘肅省","青海省","臺灣省","內蒙古自治區","廣西壯族自治區","西藏自治區","寧夏回族自治區","新疆維吾爾自治區","香港特別行政區","澳門特別行政區" };
        public JsonResult GetProvinces(string q, string page)
         {
            var lstRes = new List<Province>();
            for (var i = 0; i < 30; i++)
            {
                var oProvince = new Province();
                oProvince.id = i;
                oProvince.name = lstProvince[i];
                lstRes.Add(oProvince);
            }
            if (!string.IsNullOrEmpty(q.Trim()))
            {
                lstRes = lstRes.Where(x => x.name.Contains(q)).ToList();
            }
            var lstCurPageRes = string.IsNullOrEmpty(page) ? lstRes.Take(10) : lstRes.Skip(Convert.ToInt32(page) * 10 - 10).Take(10);
            return Json(new { items = lstCurPageRes, total_count = lstRes.Count }, JsonRequestBehavior.AllowGet);
        }

2016年1月10日補充

上面說了這麼多,那麼我們在選中select2的選項之後如何取值和賦值呢?

1、獲取選中的值

 var oMenuIcon = $("#txt_menuicon_web").select2({
            placeholder: "請選擇選單圖示",
            templateResult: oInit.formatState,
            templateSelection: oInit.formatState
        });
oMenuIcon.val();

2、設定select2的選中值

 var oMenuIcon = $("#txt_menuicon_web").select2({
            placeholder: "請選擇選單圖示",
            templateResult: oInit.formatState,
            templateSelection: oInit.formatState
        });
 oMenuIcon.val("CA").trigger("change");

相關推薦

JS元件系列——Bootstrap Select2元件使用小結

前言:在介紹select元件的時候,博主之前分享過一篇JS元件系列——兩種bootstrap multiselect元件大比拼,這兩個元件的功能確實很強大,只可惜沒有圖文結合的效果(也就是將圖片放入到select裡面隨著文字一起顯示)。前兩天做一個選單圖示選擇的功能,就要用到這個圖文選擇的功能。於是乎又是找啊

JS元件系列——Bootstrap Table 表格行拖拽

前言:之前一直在研究DDD相關知識,好久沒更新JS系列文章了。這兩天做了一個簡單的業務需求,覺得效果還可以,今天在這裡分享給大家,歡迎拍磚~~ 一、業務需求及實現效果 專案涉及到訂單模組,那天突然接到一個需求,說是兩種不同狀態的訂單之間要實現插單的效果,頁面上呈現方式是:左右兩個Table,左邊Table

JS元件系列——Bootstrap右鍵選單解決方案:ContextMenu

前言:有段時間沒發表隨筆了,過個年人都變得懶了。新年剛來上班,今天正好得空,將去年遺留的兩個小元件總結記錄下。有朋友跟我說:你的bootstrap元件要能夠形成一個可以滿足一般專案需求的系列元件,才有真正的實用價值。想想說得在理。這不今天來總結下bootstrap的一個小元件的應用。好了,不說廢話,進入正題吧

JS元件系列——Bootstrap 樹控制元件使用經驗分享

前言:很多時候我們在專案中需要用到樹,有些樹僅僅是展示層級關係,有些樹是為了展示和編輯層級關係,還有些樹是為了選中項然後其他地方呼叫選中項。不管怎麼樣,樹控制元件都是很多專案裡面不可或缺的元件之一。今天,博主打算結合自己的使用經歷和網上找到的一些不錯的樹控制元件在這裡做一個分享,希望能幫大家找到最合適的控制元

JS元件系列——Bootstrap元件福利篇:幾款好用的元件推薦

前言:之前分享過很多bootstrap常用元件,包括表格、表單驗證、檔案上傳、複選下拉框、彈出框等。這段時間,博主又收藏了一些好用的元件(有些在專案中已經用起來了),經過兩天的時間,已經整理出了一部分,本著“好東西要與人分享”的原則,今天還是來點福利,將博主收藏的東西分享出來,供需要的園友參考。元件大部分都是

JS元件系列——Bootstrap寒冬暖身篇:彈出框和提示框效果以及程式碼展示

前言:對於Web開發人員,彈出框和提示框的使用肯定不會陌生,比如常見的表格新增和編輯功能,一般常見的主要有兩種處理方式:行內編輯和彈出框編輯。在增加使用者體驗方面,彈出框和提示框起著重要的作用,如果你的系統有一個友好的彈出提示框,自然能給使用者很好的頁面體驗。前面幾章介紹了bootstrap的幾個常用元件,這

JS元件系列——Bootstrap元件福利篇:幾款好用的元件推薦(二)

前言:上篇 JS元件系列——Bootstrap元件福利篇:幾款好用的元件推薦 分享了幾個專案中比較常用的元件,引起了許多園友的關注。這篇還是繼續,因為博主覺得還有幾個非常簡單、實用的元件,實在不願自己一人獨享,沒辦法,誰讓博主這麼愛分享呢~~ 七、多值輸入元件manifest 關於文字框的多值輸入,一

JS元件系列——Bootstrap Table 凍結列功能IE瀏覽器相容性問題解決方案

前言:最近專案裡面需要用到表格的凍結列功能,所謂“凍結列”,就是某些情況下表格的列比較多,需要固定前面的幾列,後面的列滾動。遺憾的是,bootstrap table裡自帶的fixed column功能有一點bug,於是和同事討論該如何解決,於是就有了這篇文章。 一、起因回顧 第一列固定 貌似

JS元件系列——Bootstrap檔案上傳元件bootstrap fileinput

前言:之前的三篇介紹了下bootstrap table的一些常見用法,發現博主對這種扁平化的風格有點著迷了。前兩天做一個excel匯入的功能,前端使用原始的input type='file'這種標籤,效果不忍直視,於是博主下定決心要找一個好看的上傳元件換掉它。既然bootstrap開源,那麼社群肯定有很多關於

JS元件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)

前言:前天剛寫了篇JS元件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基礎上能夠同時拖拽選中的多行。博主用了半天時間研究了下,效果是出來了,但是感覺不盡如人意。先把它分享出來,以後想到更好的辦法再優化吧。 一、效果展示 1、拖動前 2、拖動中

Android元件系列----Android Service元件深入解析

【前言】 花了週末兩天的時間,整理了一下作為Android四大元件之一的Service的基礎知識,通過這篇文章,應該可以明白:對Service的理解、在什麼地方使用、怎麼使用、要注意哪些問題等。 【本文主要內容】 一、Service的基本概念(四大元件之一)二、定義(啟動)一個Servi

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

轉載原文地址:https://www.cnblogs.com/landeanfen/p/5013452.html 前言:今天繼續來看看bootstrap的另一個元件:multiselect。記得在專案開始之前,博主專案組幾個同事就使用哪些js元件展開過討論,其中就說到了select元件,

JS元件系列——表格元件神器:bootstrap table(三:終結篇,最後的乾貨福利)

前言:前面介紹了兩篇關於bootstrap table的基礎用法,這章我們繼續來看看它比較常用的一些功能,來個終結篇吧,毛爺爺告訴我們做事要有始有終~~bootstrap table這東西要想所有功能覆蓋似乎不太現實,博主挑選了一些自認為比較常用的功能在此分享給各位園友。原始

JS元件系列——表格元件神器:bootstrap table

前言:之前一直在忙著各種什麼效果,殊不知最基礎的Bootstrap Table用法都沒有涉及,罪過,罪過。今天補起來吧。上午博主由零開始自己從頭到尾使用了一遍Bootstrap Table ,遇到不少使用方面的問題,也做了一部分筆記,在此分享出來供需要使用的園友參考。還記得前

JS元件系列——表格元件神器:bootstrap table(二:父子表和行列調序)

前言:上篇 JS元件系列——表格元件神器:bootstrap table 簡單介紹了下Bootstrap Table的基礎用法,沒想到討論還挺熱烈的。有園友在評論中提到了父子表的用法,今天就結合Bootstrap table的父子表和行列調序的用法再來介紹下它稍微高階點的用法

JS元件系列——不容錯過的兩款Bootstrap Icon圖示選擇元件

前言:最近好多朋友在群裡面聊到bootstrap icon圖示的問題,比如最常見的選單管理,每個選單肯定需要一個對應的選單圖示,要是有一個視覺化的圖示選擇元件就好了,最好是直接選擇圖示,就能得到對應的class樣式。於是乎各種百度,皇天不負有心人,最後被博主找到了,感覺效果還不錯,並且支援自定義的圖示,今天就

JS元件系列——再推薦一款好用的bootstrap-select元件,親測還不錯

前言:之前分享過兩篇bootstrap下拉框的元件:JS元件系列——兩種bootstrap multiselect元件大比拼  和 JS元件系列——Bootstrap Select2元件使用小結 ,收到很多園友的關注和提問,最後總結這兩篇裡面的下拉框元件都存在一些大大小小的問題,比如兩種bootstrap m

JS元件系列——自己動手封裝bootstrap-treegrid元件

前言:最近產品需要設計一套相對完整的組織架構的解決方案,由於組織架構涉及到層級關係,在表格裡面展示層級關係,自然就要用到所謂的treegrid。可惜的是,一些輕量級的表格元件本身並沒有自帶樹形表格的功能,比如bootstrapTable就沒有這個功能,怎麼辦呢?如果是jqgrid、easyUI的表格,tree

JS元件系列——基於Bootstrap Ace模板的選單和Tab頁效果分享(你值得擁有)

前言:最近園子裡多了許多談語言、談環境、談逼格(格局)的文章,看看笑笑過後,殊不知其實都是然並卵。提升自己的技術才是王道。之前博主分享過多篇bootstrap元件的文章,引起了很多園友的關注和支援,看樣子這種風格還是受到很多園友青睞的。本著不辜負園友們的支援的原則,應群友們的要求,今天來分享下專案中使用Ace

JS元件系列——分享自己封裝的Bootstrap樹形元件:jqTree

 前言:之前的一篇介紹了下如何封裝自己的元件,這篇再次來體驗下自己封裝元件的樂趣。看過博主部落格的園友應該記得之前分享過一篇樹形選單的使用JS元件系列——Bootstrap 樹控制元件使用經驗分享,這篇裡面第一個Jquery Tree,只是用簡單樣式和js去實現了效果,沒有給出一個系統的封裝,這篇博主就來試試