【EasyUI】combotree和combobox模糊查询
这里说的模糊查询指在输入框输入,然后自动在下拉框中显示匹配结果,类似Google搜索提示
EasyUI库已经实现了combobox的查询过滤功能,但只能从头匹配,原因是EasyUI库的代码限制:
- filter: function(q, row){
- var opts = $(this).combobox('options');
- return row[opts.textField].indexOf(q) == 0;
- }
combobox有一个filter属性,通过这个属性来实现查询效果,在EasyUI库或本地combobox控件中修改这个filter方法就可以实现自定义查询效果
- $('#businessCityNo').combobox({
- valueField : 'businessCityNo',
- textField : 'businessCityName',
- editable:true ,
- required: true,
- filter: function(q, row){
- var opts = $(this).combobox('options');
- return row[opts.textField].indexOf(q) >= 0;//这里改成>=即可在任意地方匹配
- },
- data : d.rows,
- });
当然,直接在生成combobox的地方来添加filter,有多少个就得添加多少次,很麻烦,简单一点,在本地js文件中覆盖这个filter:
- $.fn.combobox.defaults.filter = function(q, row){
- var opts = $(this).combobox('options');
- return row[opts.textField].indexOf(q) >= 0;
- }
效果如下:
combobox可以通过重写filter方法来实现自定义匹配方式,是因为EasyUI库有对filter属性的底层支持,EasyUI的官方文档中明确提到combobox的属性列表,其中就有filter:
The properties extend from combo, below is the added properties for combobox.
| Name | Type | Description | Default |
|---|---|---|---|
| valueField | string | The underlying data value name to bind to this ComboBox. | value |
| textField | string | The underlying data field name to bind to this ComboBox. | text |
| groupField | string | Indicate what field to be grouped. Available since version 1.3.4. | null |
| groupFormatter | function(group) | return group text to display on group item. Available since version 1.3.4.
Code example: $('#cc').combobox({
|
|
| mode | string | Defines how to load list data when text changed. Set to 'remote' if the combobox loads from server. When set to 'remote' mode, what the user types will be sent as the http request parameter named 'q' to server to retrieve the new data. | local |
| url | string | A URL to load list data from remote. | null |
| method | string | The http method to retrieve data. | post |
| data | array | The list data to be loaded.
Code example: <input class="easyui-combobox" data-options=" |
null |
| filter | function | Defines how to filter the local data when 'mode' is set to 'local'. The function takes two parameters: q: the user typed text. row: the list row data. Return true to allow the row to be displayed. Code example: $('#cc').combobox({
|
|
| formatter | function | Defineds how to render the row. The function takes one parameter: row.
Code example: $('#cc').combobox({
|
|
| loader | function(param,success,error) | Defines how to load data from remote server. Return false can abort this action. This function takes following parameters: param: the parameter object to pass to remote server. success(data): the callback function that will be called when retrieve data successfully. error(): the callback function that will be called when failed to retrieve data. |
json loader |
| loadFilter | function(data) | Return the filtered data to display. Available since version 1.3.3. |
除此之外,还有匹配中文或英文的问题,这里不讨论,如果遇到请Google
但是,EasyUI并没有为combotree提供filter属性,也就是说没有重写filter方法的根据,官方文档提到combotree就一个属性:
The properties extend from combo and tree, below is the overridden properties for combotree.
| Name | Type | Description | Default |
|---|---|---|---|
| editable | boolean | Defines if user can type text directly into the field. | false |
那么,要使combotree实现查询功能,只能通过扩展代码,在EasyUI库或者本地js文件中加入以下代码:
- (function(){
- $.fn.combotree.defaults.editable = true;
- $.extend($.fn.combotree.defaults.keyHandler,{
- up:function(){
- console.log('up');
- },
- down:function(){
- console.log('down');
- },
- enter:function(){
- console.log('enter');
- },
- query:function(q){
- var t = $(this).combotree('tree');
- var nodes = t.tree('getChildren');
- for(var i=0; i<nodes.length; i++){
- var node = nodes[i];
- if (node.text.indexOf(q) >= 0){
- $(node.target).show();
- } else {
- $(node.target).hide();
- }
- }
- var opts = $(this).combotree('options');
- if (!opts.hasSetEvents){
- opts.hasSetEvents = true;
- var onShowPanel = opts.onShowPanel;
- opts.onShowPanel = function(){
- var nodes = t.tree('getChildren');
- for(var i=0; i<nodes.length; i++){
- $(nodes[i].target).show();
- }
- onShowPanel.call(this);
- };
- $(this).combo('options').onShowPanel = opts.onShowPanel;
- }
- }
- });
- })(jQuery);
如果在公共EasyUI库中加入以上代码,就可以在本地重写query方法来实现和combobox一样的自定义查询效果;如果是本地可以直接更改query实现自定义。
效果如下:
总结:让EasyUI的combobox和combotree同时支持自定义模糊查询,在不更改其他代码的情况下,添加以下代码就行了:
- /**
- * combobox和combotree模糊查询
- */
- (function(){
- //combobox可编辑,自定义模糊查询
- $.fn.combobox.defaults.editable = true;
- $.fn.combobox.defaults.filter = function(q, row){
- var opts = $(this).combobox('options');
- return row[opts.textField].indexOf(q) >= 0;
- };
- //combotree可编辑,自定义模糊查询
- $.fn.combotree.defaults.editable = true;
- $.extend($.fn.combotree.defaults.keyHandler,{
- up:function(){
- console.log('up');
- },
- down:function(){
- console.log('down');
- },
- enter:function(){
- console.log('enter');
- },
- query:function(q){
- var t = $(this).combotree('tree');
- var nodes = t.tree('getChildren');
- for(var i=0; i<nodes.length; i++){
- var node = nodes[i];
- if (node.text.indexOf(q) >= 0){
- $(node.target).show();
- } else {
- $(node.target).hide();
- }
- }
- var opts = $(this).combotree('options');
- if (!opts.hasSetEvents){
- opts.hasSetEvents = true;
- var onShowPanel = opts.onShowPanel;
- opts.onShowPanel = function(){
- var nodes = t.tree('getChildren');
- for(var i=0; i<nodes.length; i++){
- $(nodes[i].target).show();
- }
- onShowPanel.call(this);
- };
- $(this).combo('options').onShowPanel = opts.onShowPanel;
- }
- }
- });
- })(jQuery);
【EasyUI】combotree和combobox模糊查询的更多相关文章
- Winform如何实现ComboBox模糊查询
最近朋友问了一个关于Winform实现ComboBox模糊查询的知识点,自己好久没有搞Winform了,就上手练了一下,废话不多说,进入正题. 前台设计: 前台就是一个简单的Form窗体+一个Comb ...
- easyui combobox模糊查询
用easyui框架开发的攻城狮恐怕都遇到过这样一个问题,就是在新增页面combobox下拉框需要支持模糊查询,但是输入不是combobox中Data里面的值的时候,点击保存,依然是可以新增进去的,这样 ...
- 实现combobox模糊查询的时候报错 InvalidArgument=“0”的值对于“index”无效
因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下: List<string> listOnit = new L ...
- easyUI combobox combotree 模糊查询,带上下键选择功能,待完善。。。。
/2017年4月9日 11:52:36 /** * combobox和combotree模糊查询 * combotree 结果带两级父节点(手动设置数量) * 键盘上下键选择叶子节点 * 键盘回车键设 ...
- easyui combotree模糊查询
技术交流QQ群:15129679 让EasyUI的combobox和combotree同时支持自定义模糊查询,在不更改其他代码的情况下,添加以下代码就行了: /** * combobox和combot ...
- 老生常谈combobox和combotree模糊查询
FIRST /** * combobox和combotree模糊查询 * combotree 结果显示两级父节点(手动设置数量) * 键盘上下键选择叶子节点 * 键盘回车键设置文本的值 */ (fun ...
- easyui combotree combobox 使用例子
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- combobox实现模糊查询自动填充
利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能.本文就讲讲述如何用C#实现combobox下拉列表的模糊查 ...
随机推荐
- 打气筒的Api
1.获取打气筒的第一种方法 view=View.inflate(getApplicationContext(),R.layout.tv,null); 2.获取打气筒的第二种方法 view=Layout ...
- [原创]WKWebview点击图片查看大图
大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...
- Java SE 基础:注释
Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...
- 关于去除Eclipse对JavaScript的验证
关于去除Eclipse对JavaScript的验证 在我们使用大量JavaScript作为一些UI或其他组件来使用时,很多情况下,明明引用的这些JavaScript是可以正常使用的,但Eclipse却 ...
- [POJ3111]K Best(分数规划, 二分)
题目链接:http://poj.org/problem?id=3111 求选k对数,使得上述式子值最大.容易想到设左边为一个值,对式子变形以下,得到sigma(v-r*w))==0的时候就是最大的,& ...
- C#知识点总结系列:5、CLR的组成和运转
clr基本 CLR(Common Language Runtime)是一个可由多种编程语言使用的“运行时”.(例如:c#,c++/cli,vb,f#,ironpython,ironruby,il... ...
- Fair Scheduler 队列设置经验总结
Fair Scheduler 队列设置经验总结 由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占.在使用过程中,才明白资源抢占的一些特点.在这里总结一下. 只有一个队 ...
- 谈谈Web前端工程师的定位
原文地址:http://www.360doc.com/content/10/0708/17/1277406_37692580.shtml 2010-07-08 锋子chans 阅 1116 转 ...
- javascript中利用柯里化函数实现bind方法
柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预 ...
- iOS - Regex 正则表达式
1.Regex 定义 正则表达式又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为 regex.regexp 或 RE),计算机科学的一个概念.正则表达式使用单个 ...