關於easyui combobox下拉框實現多選框的實現


好長時間沒有更博了,一是因為最近真的比較忙,二是因為自己是真的偷懶了,哈哈

     好啦,這篇博客主要是總結一些關於easyui combobox下拉框實現多選框的實現,包括前台界面的展示,和后台對數據的獲取應用

一、實現的效果圖如下:

JSON數據示例:

[{"NAME":"省級名醫","CODE":"sjmy"},{"NAME":"市級名醫","CODE":"市級名醫"}]

  二、實現

   1、前台html代碼:定義學術榮譽下拉框

    <td align="right" style="width: 70px;">學術榮譽:</td>  
        <td >  
              <input id="xsry" name="xsry"  style="width: 150px;"  class="easyui-combobox" >  
        </td>  

2、js部分初始化學術榮譽下拉框數據

      需要給大家說明一下的是,我上面展示的效果圖里面加載的數據來自我自己這邊的數據庫字典,即來自數據庫,那么就需要從后台獲取數據了,下面會做詳細介紹,

很多同學會很好奇我的easyui-combobox實現的效果怎么和官方的實現相比多了每個下拉選項前面的復選框,這個到底是怎么實現的,好啦,下面就將實現的代碼先貼出來

滿足一下大家的好奇心

    $(function(){  
      
     //初始化多選復選框  
     initCombobox('xsry','XSRY_CD');//學術榮譽的字典編碼是XSRY_CD  
    )  
    //參數:id  控件id   code 字典編碼  
    function initCombobox(id,code){  
                var value = "";  
                //加載下拉框復選框  
                $('#'+id).combobox({  
                    url:'${base}/ht/getComboboxData.action?dictionaryCode='+code, //后台獲取下拉框數據的url  
                    method:'post',  
                    panelHeight:200,//設置為固定高度,combobox出現豎直滾動條  
                    valueField:'CODE',  
                    textField:'NAME',  
                    multiple:true,  
                    formatter: function (row) { //formatter方法就是實現了在每個下拉選項前面增加checkbox框的方法  
                        var opts = $(this).combobox('options');  
                        return '<input type="checkbox" class="combobox-checkbox">' + row[opts.textField]  
                    },  
                    onLoadSuccess: function () {  //下拉框數據加載成功調用  
                        var opts = $(this).combobox('options');  
                        var target = this;  
                        var values = $(target).combobox('getValues');//獲取選中的值的values  
                        $.map(values, function (value) {  
                            var el = opts.finder.getEl(target, value);  
                            el.find('input.combobox-checkbox')._propAttr('checked', true);   
                        })  
                    },  
                    onSelect: function (row) { //選中一個選項時調用  
                        var opts = $(this).combobox('options');  
                        //獲取選中的值的values  
                        $("#"+id).val($(this).combobox('getValues'));  
                         
                       //設置選中值所對應的復選框為選中狀態  
                        var el = opts.finder.getEl(this, row[opts.valueField]);  
                        el.find('input.combobox-checkbox')._propAttr('checked', true);  
                    },  
                    onUnselect: function (row) {//不選中一個選項時調用  
                        var opts = $(this).combobox('options');  
                        //獲取選中的值的values  
                        $("#"+id).val($(this).combobox('getValues'));  
                        
                        var el = opts.finder.getEl(this, row[opts.valueField]);  
                        el.find('input.combobox-checkbox')._propAttr('checked', false);  
                    }  
                });  
            }  

我們在選中和取消選中的時候都通過:$(this).combobox('getValues')獲取一下combobox的值,然后再將獲取的值賦值給$("#xsry").val($(this).combobox('getValues'))

然后我們就可以通過$("#xsry").val()輕松獲取多選的值了。

3、后台獲取下拉框數據的url:  '${base}/ht/getComboboxData.action?dictionaryCode='+code, 代碼實現如下:

  Controller層:

    @RequestMapping(value = "/getComboboxData")  
        @ResponseBody  
        public String getComboboxData(HttpServletRequest request,String dictionaryCode) {  
              
            String data ;  
            JSONObject json = new JSONObject();  
            JSONArray array = new JSONArray();  
            try{  
                List<Map> resultList = tPersonService.getComboboxData(dictionaryCode);  
                if(!resultList.isEmpty()){  
                    for(Map<String,Object> lb : resultList){  
                        json.put("CODE", lb.get("CODE"));  
                        json.put("NAME", lb.get("NAME"));             
                        array.add(json);  
                    }  
                }  
                data =  array.toString();  
            } catch (Exception e) {  
                data = "{}" ;  
            }  
            return data;  
        }  

Service 層:

    public List<Map> getComboboxData(String dictionaryCode) {  
               String sql = "select * from cendic.d_dictionary_item t where t.d_code= ?  order by  t.code" ;  
               Query query = commonDao.createSQLQuery(sql, null, null,new Object[]{dictionaryCode});  
               List<Map> list = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();  
               return list;  
        }  

getComboboxData方法主要是為了從數據庫獲取下拉框的要加載的數據

       其實我要獲取這個下拉框選中的多個值,主要是為了實現我的查詢功能,因為這些選中的值將 作為我在人員信息表中查詢人員信息的查詢條件,這就涉及到我們需要將下拉框獲取的值傳遞到后台,然后拆分出每個值,然后寫入數據庫查詢語句,進行查詢

     1、將值傳遞到后台很簡單,我在這里不在多做說明,因為我們前台已經通過 $("#xsry").val()獲取到了選中的值的,比如獲取的值為:“1,2,3”

     2、可是前台傳遞過來的值,我們在后台是不能直接用的,因為它是有一個字符串,

          后台如何將獲取的值進行拆分,寫成數據庫可以識別的查詢語句,代碼如下:

    String xsry = param.get("xsry").toString(); //獲取前台傳過來的值"1,2,3"  
    if(StringUtils.isNotBlank(xsry)){  
        String[] array = xsry.split(",") ; //拆分字符串,分隔符為','  
        String temp = "";  
        for (int i = 0; i < array.length; i++) //這個FOR循環就是加單引號  
            {  
                 array[i] = "'" + array[i] + "'";    
            }  
            temp = StringUtils.join(array, ","); //temp變為 '1','2','3'  
              
        //sql :變成了A.XSRY in ('1','2','3')             
        sql += "   AND A.XSRY in  ( " + temp + " ) " ;   
                          
            }  

 


免責聲明!

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



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