[jQuery Plugin] Select2 實作筆記

Select2 真的是很實用的 jQuery Plugin

可以下拉、搜尋、多選等.....

https://select2.github.io/

https://github.com/select2/select2

 
先在codepen上做一個看看

首先先在HTML中加入

<select id="select2-multiple" class="select2-multiple" multiple="multiple"></select>

然後引用jQuery及select2.min.js

https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js

接著先做一個假資料待會可以拿來測試看看

var options = [
  { id: 0, text: 'enhancement' },
  { id: 1, text: 'bug' },
  { id: 2, text: 'duplicate' },
  { id: 3, text: 'invalid' },
  { id: 4, text: 'wontfix' }
];

最後Selecter抓取剛剛上面寫好的select2-multiple並設定一些初始化的參數

$(function(){
  $(".select2-multiple").select2({
    data: options,
    maximumInputLength: 10,
    minimumInputLength: 1,
    tags: true,
    tokenSeparators: [',', ' ']
  });
});

參數簡介

data:資料就像上面做的假資料那樣

maximumInputLength: 能夠的輸入最大長度(填入數字)

minimumInputLength: 最少要輸入多少字元(填入數字)

tokenSeparators: 用什麼符號分隔,例如 : "," 或是 " "(空白)

詳細參數說明在 http://select2.github.io/select2/ 這網頁下面有Documentation(大概在整個網頁中間的地方),還有很多範例

在codepen實作結果,隨便輸入幾個英文字母測試看看

套進.net MVC 專案看看

這個部分跟剛剛最大的不同就是資料應該想從後端取得

所以一樣要在後端先做模擬的假資料部分

開始做模擬資料的部分

因為要回傳JSON格式要有id跟text

所以先來寫個class

public class QueryTag
{
	public int id { get; set; }
	public string text { get; set; }
}

再來就是產出模擬資料JSON字串

public ActionResult TestApi(string q)
{
	List<QueryTag> options = new List<QueryTag>();
	options.Add(new QueryTag { id = 1, text = "orange" });
	options.Add(new QueryTag { id = 2, text = "apple" });
	options.Add(new QueryTag { id = 3, text = "grape" });
	options.Add(new QueryTag { id = 4, text = "cherry" });
	options.Add(new QueryTag { id = 5, text = "peach" });
	var QueryOptions = (from qo in options
						where qo.text.Contains(q)
						select new { id = qo.id, text = qo.text }).ToList();

	return Json(QueryOptions, JsonRequestBehavior.AllowGet);
}

模擬資料完成!

接著做View的部分

用Html Helper 做一個select

@{ 
    IEnumerable<SelectListItem> Options = new List<SelectListItem>();
}
@Html.ListBox("select2-multiple", Options, new { @class = "select2-multiple" })

 

Javascript部分

先引入select2.js

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>

再依照各自需求調整設定參數

$(function () {
	$(".select2-multiple").select2({
		ajax: {
			url: "/Home/TestApi",
			dataType: 'json',
			delay: 250,
			data: function (params) {
				//console.log(params);
				return {
					q: params.term, // search term
					page: params.page
				};
			},
			processResults: function (data, params) {
				params.page = params.page || 1;
				//console.log("Return_date:  ", data);
				//console.log("Return_params:  ", params);
				//console.log("Return_date:  ", data.items);

				return {
					results: data,
					//是否使用分頁
					pagination: {
						more: (params.page * 30) < data.total_count
						//還有沒有更多結果
					}
				};
			}
		},
			//data: options,
		maximumInputLength: 10,
		minimumInputLength: 1,
		tags: true,
		tokenSeparators: [',', ' '],
		placeholder: "可輸入多組,以 \",\" 分隔,例:orange, peach, cherry",
	});
});

然後就完成啦!

範例檔:

https://bitbucket.org/yu_allen/select2exercise/src