EasyUI combobox下拉列表实现搜索过滤(模糊匹配)和placeholder效果

实现搜索功能:  

项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能。看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便。于是就记录一下模糊匹配的方案。

实现效果:

这里使用的是combobox组合框,对于combobox的创建可以使用<input>输入框,也可以使用<select>下拉选。我使用的是<select>

HTML代码

1<label>关联课程</label> 2<select class="easyui-combobox" name="itemsId" id="itemsId" style="width:135px;height:25px;"> 3 <option>请选择关联课程</option> 4</select>

然后通过js从远程获取数据并实现搜索功能:

1$("#itemsId").combobox({ 2 url: "xxxxxx", 3 editable: true, 4 valueField: 'id', 5 textField: 'name', 6 panelWidth: 220, // 下拉框宽度 7 panelHeight: 250, // 下拉框高度 8 filter: function(q, row){ 9 var opts = $(this).combobox('options'); 10 return row[opts.textField].indexOf(q) > -1; 11 } 12 });

因为需要输入查询,所以下拉项必须得可编辑。使用combobox创建下拉项默认是可以编辑的,设置 editable: true 虽然感觉很鸡肋,但看起来功能更清晰。

filter:定义函数如何过滤数据,return row[opts.textField].indexOf(q) == 0时只能前缀匹配,  return row[opts.textField].indexOf(q) > -1 就是模糊匹配了。

这样模糊匹配的功能就实现了。随便记录一下默认显示值的问题。

设置显示默认值:

实现placeholder效果

使用combobox组合框时,会生成 class=“combo-text validatebox-text” 的文本框,所以通过id和类选择器选择目标input设置placeholder属性即可。

通过id定位时,不能使用combobox的id,得使用父级元素的id定位

1<div id="subCourse_dlg" style="width: 300px; height: 160px;" closed="true"> 2 <div style="margin: 10px 10px;"> 3 <select class="easyui-combobox" name="subCourse" id="subCourse" style="width: 220px;"> 4 </select> 5 </div> 6 </div>

$("#subCourse_dlg .combo-text").attr("placeholder","选择或输入名称查询...");

显示默认值

在修改数据时默认得显示设置的值,也就是加载的选择项selected=true,一开始我是想使用formatter函数将获取的列表数据选中的项添加selected属性为true,但这种方式会导致下拉列表显示为空白

所以这种方式是不可行的,于是就寻求了其他方式,发现了解决方案:

通过combobox的select方法:

只需添加下面这行代码就行,在combobox创建前后都可以。

$("#itemsId").combobox("select", rows.name)

这是通过combobox的select方法选择指定的选项,“rows.name”可以是option的value,也可以text。

当然也可以在combobox的onLoadSuccess事件,从远程数据加载成功时处理(这种方式就太累赘了,只是为了记录一下onLoadSuccess的使用):

1$("#itemsId").combobox({ 2 url: 'xxxx', 3 editable: true, 4 valueField: 'id', 5 textField: 'kcName', 6 panelWidth: 220, 7 panelHeight: 250, 8 filter: function(q, row){ 9 var opts = $(this).combobox('options'); 10 return row[opts.textField].indexOf(q) > -1; 11 }, 12 onLoadSuccess: function(data) { 13 for(var i = 0; i < data.length; i++) { 14 if(data[i].id == rows.itemsId) { 15 $("#itemsId").combobox("select", data[i].id) 16 } 17 } 18 } 19 });
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang