自己主动提示是时下一个非常流行的功能,比方说百度、谷歌的搜索输入框都使用到了这么一个功能。

因为easyUI的combobox设计师已经考虑到了这个功能。所以仅仅需简单几步我们能够轻松打造自己的自己主动提示组件。

自己主动提示有两种模式,一种是本地(local)一种是远程的(remote)。

local的意思也就是说先将全部的数据都载入到client页面,之后不过在这些已载入的数据中去过滤,不会向server发出额外的请求

而remote呢,也就是说事先并不载入全部数据。而是等到用户输入keyword之后,再向server发出请求,返回结果

这两种模式的适用场景也比較明显。local方式比較适用于数据量小的情况,载入全部数据快,且用起来方便,无需再在后台加入搜索方法;

而remote适用于数据量大的情况,由于须要查询的数据往往是特点的某一些,载入出全部数据就显得非常浪费了。所以当有keyword了再去查询,得到的数据量较小,从而得到更快的响应时间。

只是还须要在后台写一个查询数据的方法。

先来演示一下local的方式,分为两步:载入数据、过滤数据

载入数据:

通过设置data或是url,这里推荐通过data,由于这样不须要发起额外的请求。

过滤数据:

首先须要能够编辑,combobox默认的editable就是true,那么无需额外设置。

而且combobox提供了filter方法帮助我们来过滤本地数据

$('#cc').combobox({
filter: function(q, row){
var opts = $(this).combobox('options');
return row[opts.textField].indexOf(q) == 0;
}
});

这里的q就是我们输出的keyword。而row就代表本地数据中的一行数据

熟悉jQuery的朋友应该非常好理解,filter就是过滤出哪些满足測试条件的数据。在这里。測试条件就是row[opts.textField].indexOf(q) == 0,也就是说得到以keywordq开头的数据。

到这里。事实上在功能上已经实现了自己主动提示了。若是您认为组件最右边的选择框下拉箭头不美观。那么能够通过设置hasDownArrow:false将其去掉。

以下给出一个easyUI的local模式的配置供參考:

$('#cc').combobox({
prompt:'输入keyword后自己主动搜索',
required:true,
url:'repairs/getEqiupmentList',
editable:true,
hasDownArrow:false
});

至此local方式就讲完了,以下说一下remote的方式,remote要比local复杂一点,先分析一下

remote这样的方式事实上是没有载入数据这一步的。数据都在数据库里,仅仅须要过滤数据这一步取出我们感兴趣的数据就可以。

因为载入的数据是依据keyword来的。所以必须通过url到server上获取,那么首先须要在server上提供一个这个方案。

相信这个方案应该难不倒大家。仅仅须要获取到client发送的參数拿到数据库中模糊查询一下就能够了。

值得注意的是,在remote方式下:

1、每次打开表单页面的时候,总是会先发起一次请求,当中keyWord为空

2、表单保存之后再改动该表单时,会发一次请求,与1的一样,keyWord为空。这种话。之前填的数据将无法被翻译。仅仅能显示code/id等翻译前的值

针对这两点我说说我的解决方式:

1、combobox提供了一个onBeforeLoad的事件扩展点。是当去server请求数据之前触发的。return false则能够阻止请求的发起。

那么我们能够在这里推断keyWord是否为空,从而控制请求是否发起,问题1迎刃而解!

2、我们须要找到在改动表单时有什么“与众不同”之处,那就是尽管keyWord为空,可是实际上combobox中是有值的。这一点就不同于1中的请求。

那么还是利用onBeforeLoad,当keyWord为空。可是combobox的值不为空时。我们就将id发到server上,从而得到唯一的一个结果。这样性能上也是极好的吧。

以下给出combobox的设置以及后台部分代码:

$('#cc').combobox({
prompt:'输入keyword后自己主动搜索',
required:true,
mode:'remote',
url:'repairs/getEqiupmentList',
editable:true,
hasDownArrow:false,
onBeforeLoad: function(param){
if(param == null || param.q == null || param.q.replace(/ /g, '') == ''){
var value = $(this).combobox('getValue');
if(value){// 改动的时候才会出现q为空而value不为空
param.id = value;
return true;
}
return false;
}
}
});

后台search部分代码:

	public void getEqiupmentList(SearchDTO searchDTO,<span>	</span>// 这里封装了一个实体SearchDTO(String q。Integer id)
HttpServletResponse response) throws IOException {
Integer id = searchDTO.getId();
String keyWord = searchDTO.getQ();
if (id == null && StringUtils.isBlank(keyWord)) {
return;
}
if (id != null) { // 改动时传入id
List<Equipment> equipmentList = new ArrayList<Equipment>(1);<span> </span>// 这里须要返回一个jsonArray
Equipment equipment = basecodeService.getEquipmentById(id);
equipmentList.add(equipment);
sendJson(response, Utils.parseJson(equipmentList));
return;
} else {
List<Equipment> equipmentList = repairsService
.getEquipmentListBySearch(searchDTO.getQ().toString);
sendJson(response, Utils.parseJson(equipmentList));
}
}

利用easyUI的combobox打造自己主动提示组件的更多相关文章

  1. combobox自己主动提示组件加入无选中项清空功能

    这个标题非常绕口,只是这也是想了半天的成果,对不起体育老师了. 标题想表达的是:之前讲过的用combobox实现自己主动提示组件.只是如今规定该组件不能够保存data中不存在的数据. 最初的想法是通过 ...

  2. JQuery easyui (4)Tooltip (提示组件) 组件

    ps:先来一波美图 Tooltip的加载方式: 1,class加载 <a href="#" title="tooltip">hello word&l ...

  3. jquery easyUI中combobox的使用总结

    jquery easyUI中combobox的使用总结 一.如何让jquery-easyui的combobox像select那样不可编辑?为combobox添加editable属性 设置为false ...

  4. EasyUI 通过 Combobox 实现 AutoComplete 效果

    朋友在做一个web程序,用的EasyUI框架,让我帮忙实现一个自动提示功能.由于之前我也没用过EasyUI框架,就想到了jQueryUI有 AutoComplete 插件,就想直接拿过来用. 但当我将 ...

  5. easyui的combobox的onChange事件的实现

    easyui的combobox的onChange事件的实现,直接上代码: <div style="display:inline;margin-left:15px;"> ...

  6. easyui的combobox下拉框初始化默认值以及保持该值一直显示的方法

    easyui的combobox下拉框默认初始值是空,下面是实现从远程加载数据之后初始化默认值,以及让该值一直排在下拉框的最顶部的方式. 目前的需求是需要在初始化的时候添加"全部数据库&quo ...

  7. 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交

    http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要 ...

  8. 利用Spring.Net技术打造可切换的分布式缓存读写类

    利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...

  9. Android Studio代码自己主动提示无效(not available in Power Save mode)

    针对一位博友提的问题,我这边写出来,预计还是非常多人会碰到这个问题,可是不知道怎样解决的. 就是在设置了代码自己主动提示功能后,发现不生效的,怎样设置代码自己主动提示请戳这:Android Studi ...

随机推荐

  1. WordPress实现前台登录功能

    一.添加登录表单 1.首先在当前主题的目录下新建一个php文件,命名为page-login.php,然后将page.php中的所有代码复制到page-login.php中: 2.删除page-logi ...

  2. Dialog共通写法(一个button)

    一个button的: package jp.co.hyakujushibank.view import android.app.Dialogimport android.content.Context ...

  3. hdu6060[贪心+dfs] 2017多校3

    /* hdu6060[贪心+dfs] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long L ...

  4. yum update 出错解决办法

    卸载掉yum和python 于是我卸载了python和yum,觉得自己重新安装python和yum. 步骤1:卸载python rpm -qa|grep python|xargs rpm -e --a ...

  5. 关于虚拟机IP网段和公司内网网段的问题?

    开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    请教一个问题,为了解决电脑换网络环境就连不上虚拟机的问题,我虚拟机使用的nat模式,我的VMnet8IP是192 ...

  6. msp430项目编程40

    msp430综合项目---多路温度检测系统40

  7. C语言函数调用及栈帧结构

    source:http://blog.csdn.net/qq_29403077/article/details/53205010 一.地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念, ...

  8. Spring Tool Suite (STS) 安装SVN插件

    今天STS安装SVN时遇到很多问题,度娘搜索几个小时才安装成功. 在此记录下安装过程. 我的 STS版本: 安装SVN有两种方式: 方法1:依次选择help->preferences->e ...

  9. Java主线程等待所有子线程执行完毕再执行解决办法(转)

    方法一: Thread.join()方法,亲测可行,thread.join()方法 Vector<Thread> ts = new Vector<Thread>(); for  ...

  10. iOS 内存管理策略

    内存管理策略(memory Management Policy) NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管理的基本模式处于这个环境中.NSObj ...