使用bootstrap-select控件 搜索欄鍵入關鍵字動態獲取后台數據


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" >角&nbsp;&nbsp;&nbsp;&nbsp;色</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>

 

 

   效果如下圖:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM