bootstrap-select開源地址:https://github.com/silviomoreto/bootstrap-selectjavascript
bootstrap-select使用示例:http://silviomoreto.github.io/bootstrap-select/examples/css
bootstrap-select文檔說明:http://silviomoreto.github.io/bootstrap-select/options/html
bootstrap-select使用參考博客:http://www.cnblogs.com/landeanfen/p/7457283.html前端
該控件依賴於Bootstrap前端框架;java
該控件的具體用法請看上述連接;jquery
該控件其中的一個用法是能夠對select標籤的選項進行搜索,從而得到精準的選項,畢竟選項可能不少;git
現在我想經過在搜索欄鍵入關鍵字,動態得到後臺傳入的選項數據,而不是一次性讀取全部數據再進行搜索;github
具體實現以下:ajax
一、引入相關文件:chrome
<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>
二、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 生成的搜索欄相關標籤和屬性,就能夠經過選擇該搜索欄觸發事件;
三、觸發事件:
<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>
效果以下圖: