ComboBox自定义多选下拉加模糊搜索的功能
添加控件引用
1 2 3 4 5 6 <tr> <th>多选模糊搜素</th> <td> <select id="comboboxid" name="comboboxname" class="easyui-combobox" placeholder="aa" multiline="true" data-options="required:false,prompt:'不选默认为全部'" style="width:228px;height: 29px;" ></select> </td> </tr>
其中prompt:'不选默认为全部'
为背景提示语,multiline="true"
为控件显示多行滚动条
在<script type="text/javascript"></script>
添加js功能代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 $(function ( ) { var lent=0 ;$('#comboboxid' ).combobox ({ url :'${pageContext.request.contextPath}/invitationCodeController/tree?checkAuthority=1' , multiple :true , valueField :'invatationcode' , textField : 'invatationcode' , value : '${setInvitationCodes}' , onBeforeLoad :function (param ){ console .log ("user" ,'${user.getMemberUnitId()}' ); param.memberUnitId ='${user.getMemberUnitId()}' ; console .log ("param" ,param); }, formatter : function (row ) { row.codeRemark = row.invatationcode +"(" +row.remark +")" ; return row.codeRemark ; }, filter :function (q,row ){ return row.codeRemark .indexOf (q)!=-1 ; }, onSelect : function (row ) { console .log ("onSelect" ,row); var values=$(this ).combobox ('getValues' ); var getData=$(this ).combobox ('getData' ); console .log ("getdata" ,getData); var valuesT=[]; for (i=0 ;i<values.length ;i++){ for (ii=0 ;ii<getData.length ;ii++){ if (values[i]==getData[ii].invatationcode ){ valuesT.push (values[i]); console .log ("有效" ,valuesT); } } } if (lent==valuesT.length -1 ){ console .log ("==" ); lent= valuesT.length ; $(this ).combobox ('setValues' ,valuesT); }else { console .log ("!=" ) } } }); });
数据请求设置 url:'${pageContext.request.contextPath}/invitationCodeController/tree?checkAuthority=1',
参数设置,其中'${user.getMemberUnitId()}'
是从java后端传过来,等于&memberUnitId=${user.getMemberUnitId()}'
1 2 3 4 5 onBeforeLoad :function (param ){ console .log ("user" ,'${user.getMemberUnitId()}' ); param.memberUnitId ='${user.getMemberUnitId()}' ; console .log ("param" ,param); },
valueField:'invatationcode', textField: 'invatationcode',
一个id一个展示的值,展示的值通过formatter
自定义,显示样式为27490008(测试)
1 2 3 4 formatter : function (row ) { row.codeRemark = row.invatationcode +"(" +row.remark +")" ; return row.codeRemark ; },
value: '${setInvitationCodes}',
这句设置是从java后端获取出数值,默认选择或加载的值,在输入框会显示该值
设置模糊搜索,通过过滤函数filter
意思是row中包含q查询参数就显示
1 2 3 filter :function (q,row ){ return row.codeRemark .indexOf (q)!=-1 ; },
上面设置完了模糊搜索加多选是实现了,但是输入的模糊查找的字符不会自动去掉,下面设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 onSelect : function (row ) { console .log ("onSelect" ,row); var values=$(this ).combobox ('getValues' ); var getData=$(this ).combobox ('getData' ); console .log ("getdata" ,getData); var valuesT=[]; for (i=0 ;i<values.length ;i++){ for (ii=0 ;ii<getData.length ;ii++){ if (values[i]==getData[ii].invatationcode ){ valuesT.push (values[i]); console .log ("有效" ,valuesT); } } } if (lent==valuesT.length -1 ){ console .log ("==" ); lent= valuesT.length ; $(this ).combobox ('setValues' ,valuesT); }else { console .log ("!=" ) } }
通过遍历源数据 var getData=$(this).combobox('getData');
和选中的数据(输入框的数据) var values=$(this).combobox('getValues');
对比得到有效的选中数据,但是还需要在合适的时间设置有效选择数据
onSelect
方法在输入框输入字和选择时都会触发,因此加个判断if (lent==valuesT.length-1)
当选中有效数据每增加1个时触发因此比较长度即可,lent
为全局变量,做历史长度存储
数据返回json格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ { "invatationcode" : "27491007" , "createdate" : 1510284005000 , "updatedate" : 1510284005000 , "flag" : 1 , "remark" : "我是账号备注" } , ......... { "invatationcode" : "27490008" , "createdate" : 1510284334000 , "updatedate" : 1510284334000 , "flag" : 1 , "remark" : "测试" , } ]