bootstrap-select開源位址:https://github.com/silviomoreto/bootstrap-select
bootstrap-select使用示例:http://silviomoreto.github.io/bootstrap-select/examples/
bootstrap-select文檔說明:http://silviomoreto.github.io/bootstrap-select/options/
bootstrap-select使用參考部落格:http://www.cnblogs.com/landeanfen/p/7457283.html
該控件依賴于Bootstrap前端架構;
該控件的具體用法請看上述連結;
該控件其中的一個用法是可以對select标簽的選項進行搜尋,進而獲得精準的選項,畢竟選項可能很多;
如今我想通過在搜尋欄鍵入關鍵字,動态獲得背景傳入的選項資料,而不是一次性讀取所有資料再進行搜尋;
具體實作如下:
1、引入相關檔案:
<head>
<!-- 引入 Bootstrap樣式 -->
<link href="${pageContext.request.contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
<!-- bootstrap-select樣式 -->
<link href="${pageContext.request.contextPath}/resources/css/select/bootstrap-select.min.css" rel="stylesheet">
<!-- jQuery (Bootstrap 依賴于 jQuery) -->
<script src="${pageContext.request.contextPath}/resources/js/jquery-3.0.0.min.js"></script>
<!-- Bootstrap -->
<script src="${pageContext.request.contextPath}/resources/js/bootstrap.min.js"></script>
<!-- Bootstrap-select 控件 -->
<script src="${pageContext.request.contextPath}/resources/js/select/bootstrap-select.min.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/select/defaults-zh_CN.min.js"></script>
</head>
2、select标簽
<form id="addForm" action="${pageContext.request.contextPath}/admin/authority/manager/saveAdd" method="post">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >管理者</span>
<!--觸發bootstrap-select需添加class="selectpicker" 搜尋功能需添加data-live-search="true" -->
<select data-size="6" class="form-control selectpicker show-tick" data-live-search="true" title="請輸入管理者" id="select-manager" name="managerName" data-selectNameUrl="${pageContext.request.contextPath}/admin/authority/managerRole/getManagerByName" >
</select>
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >角 色</span>
<select class="form-control selectpicker show-tick" data-size="6" data-live-search="true" id="select-role" name="roleName" title="請選擇角色" >
<c:forEach var="selectRole" items="${selectRoles}" varStatus="statu">
<option value ="${selectRole.id}" >${selectRole.roleName}</option>
</c:forEach>
</select>
</div>
</div>
</form>
到這步為止,管理者的select标簽下,我沒有添加任何的<option></option>标簽,是以選項為空
效果圖:

現在我要實作的是,在搜尋欄中一鍵入字元就觸發事件:動态獲得背景資料來添加<option></option>标簽;
如今遇到的問題是,搜尋欄是bootstrap-select控件生成的,無法事先知道怎麼選擇該搜尋欄以觸發事件,
解決方法是調用chrome的開發者模式,發現了bootstrap-select控件生成的标簽,如下圖所示:
知道了bootstrap-select 生成的搜尋欄相關标簽和屬性,就可以通過選擇該搜尋欄觸發事件;
3、觸發事件:
<script type="text/javascript">
$().ready(function(){
//鍵入字元觸發事件:動态獲得背景傳入select選項資料
//請求的url
var selectNameUrl = $("#select-manager").attr("data-selectNameUrl");
//選擇得到搜尋欄input,松開按鍵後觸發事件
$("#select-manager").prev().find(\'.bs-searchbox\').find(\'input\').keyup(function () {
//鍵入的值
var inputManagerName =$(\'#addForm .open input\').val();
//判定鍵入的值不為空,才調用ajax
if(inputManagerName != \'\'){
$.ajax({
type: \'Get\',
url: selectNameUrl,
data: { //傳遞到背景的值
managerName: inputManagerName
},
dataType: "Json",
success: function (Selectmanagers) {
//清除select标簽下舊的option簽,根據新獲得的資料重新添加option标簽
$("#select-manager").empty();
if (Selectmanagers != null) {
$.each(Selectmanagers, function (i,Selectmanager) {
$("#select-manager").append(" <option value=\"" + Selectmanager.id + "\">" + Selectmanager.managerName + "</option>");
})
//必不可少的重新整理
$("#select-manager").selectpicker(\'refresh\');
}
}
})
}else
//如果輸入的字元為空,清除之前option标簽
$("#select-manager").empty();
$("#select-manager").selectpicker(\'refresh\');
});
});
</script>
效果如下圖: