對比了多款bootstrap系列的插件,最終還是選擇了bootstrap-select。選擇他的原因是他比較簡潔大方。但是在使用的過程中還是發現了一些使用的問題。在這我一一道來。
https://www.cnblogs.com/landeanfen/p/5099332.html(其他兩種select參考)
首先我的業務需求是
- 可以多選
- 搜索框可以模糊查詢,可以后台查詢。
當然主要的實現難度是在第二個環節
bootstrap-select的 search是在已經存在的option中進行篩選的,由於我的下拉框數據基數過於龐大,我是用oninput執行數據填充操作。實現代碼如下,我是把后台請求的所有數據緩存在瀏覽器中,每次去瀏覽器緩存中拿到數據並填充到select中,記住一定要在append之后執行$('.selectpicker').selectpicker('refresh');不然無法顯示,如果追加過后的下拉框過於長的話你也可以設置顯示的長度$('.selectpicker').selectpicker({actionsBox: true, //全選,取消全選按鈕liveSearch: true,size:6});
document.getElementById("bs-searchbox").oninput = function () {
var keyword = $("#bs-searchbox input").val();
if (keyword.length > 3)//當字符長度等於四的時候返回查詢結果
{
var ssdata = sessionStorage.getItem("CarList");
if (ssdata != null) {
var html = "";
var jsondata = JSON.parse(ssdata);
var returnarr = ArrayLike(jsondata, keyword)
_.each(returnarr, function (d) {
html += '<option value=' + d.CarID + '>' + d.CarName + '</option>';
})
$(".selectpicker").append(html);
$('.selectpicker').selectpicker('refresh');
}
}
//if (keyword.length ==0) {
// if ($(".bs-searchbox").nextAll("ul") != null) {
// $(".bs-searchbox").nextAll("ul").remove();
// }
//}
}
function ArrayLike(array, keyWord)
{
//正則表達式
//方法一
var arr = [];
var reg = new RegExp(keyWord);
//_.filter(array, function (obj) {
// return obj.CarName.match(reg);
//});
_.each(array, function (d) {
if (d.CarName.match(reg)) {
arr.push(d);
}
})
//方法二
//var reg = new RegExp(keyWord);
//for (var i = 0; i < array.length; i++) {
// //如果字符串中不包含目標字符會返回-1
// //方式一正則
// if (array[i].CarName.match(reg)) {
// arr.push(array[i]);
// }
// //方式二字符串匹配
// //if (array[i].CarName.indexOf(keyWord) >= 0) {
// // arr.push(array[i]);
// //}
//}
return arr;
}
