利用easyUI的combobox打造自动提示组件

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

由于easyUI的combobox设计师已经考虑到了这个功能,所以只需简单几步我们可以轻松打造自己的自动提示组件。

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

local的意思也就是说先将所有的数据都加载到客户端页面,之后仅仅是在这些已加载的数据中去过滤,不会向服务器发出额外的请求

而remote呢,也就是说事先并不加载所有数据,而是等到用户输入关键字之后,再向服务器发出请求,返回结果

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

而remote适用于数据量大的情况,因为需要查询的数据往往是特点的某一些,加载出所有数据就显得很浪费了。所以当有关键字了再去查询,得到的数据量较小,从而得到更快的响应时间。不过还需要在后台写一个查询数据的方法。

先来演示一下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就是我们输出的关键字,而row就代表本地数据中的一行数据

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

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

下面给出一个easyUI的local模式的配置供参考:

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

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

remote这种方式其实是没有加载数据这一步的,数据都在数据库里,只需要过滤数据这一步取出我们感兴趣的数据即可。

由于加载的数据是根据关键字来的,所以必须通过url到服务器上获取,那么首先需要在服务器上提供一个这样的方法。

相信这样的方法应该难不倒大家,只需要获取到客户端发送的参数拿到数据库中模糊查询一下就可以了。

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

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

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

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

1、combobox提供了一个onBeforeLoad的事件扩展点,是当去服务器请求数据之前触发的,return false则可以阻止请求的发起。

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

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

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

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

$('#cc').combobox({
	prompt:'输入关键字后自动搜索',
	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));
		}
	}
时间: 2024-10-11 15:57:00

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

利用easyUI的combobox打造自己主动提示组件

自己主动提示是时下一个非常流行的功能,比方说百度.谷歌的搜索输入框都使用到了这么一个功能. 因为easyUI的combobox设计师已经考虑到了这个功能.所以仅仅需简单几步我们能够轻松打造自己的自己主动提示组件. 自己主动提示有两种模式,一种是本地(local)一种是远程的(remote). local的意思也就是说先将全部的数据都载入到client页面,之后不过在这些已载入的数据中去过滤,不会向server发出额外的请求 而remote呢,也就是说事先并不载入全部数据.而是等到用户输入keyw

combobox自动提示组件添加无选中项清空功能

这个标题很绕口,不过这也是想了半天的成果,对不起体育老师了. 标题想表达的是:之前讲过的用combobox实现自动提示组件,不过现在规定该组件不可以保存data中不存在的数据. 最初的想法是通过onChange事件来作判断,但是无奈该函数在自动提示的模式下,每change一次会触发2次onChange事件,太诡异了遂放弃之. 而且onChange事件是在每次combobox中的内容改变时触发,若是关键字输入过程中,该事件一直触发. 而我们所要的效果是等用户输入结果再作校验,所以不符合要求. 查找

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

这个标题非常绕口,只是这也是想了半天的成果,对不起体育老师了. 标题想表达的是:之前讲过的用combobox实现自己主动提示组件.只是如今规定该组件不能够保存data中不存在的数据. 最初的想法是通过onChange事件来作推断.可是无奈该函数在自己主动提示的模式下,每change一次会触发2次onChange事件,太诡异了遂放弃之. 并且onChange事件是在每次combobox中的内容改变时触发,若是keyword输入过程中,该事件一直触发. 而我们所要的效果是等用户输入结果再作校验,所以

关于如何利用suggest添加Solr中自动提示功能的简介

suggest 是搜索引擎一个方便的功能,对数据的关键字进行预测和建议,减少了用户的输入,大体的效果如下: 幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就可以实现类似上面的功能. 启动该功能的过程大体如下: suggest 的功能依赖拼写组件,solr_home/data 目录下会有一个 spellchecker 目录,该目录用于存放 suggest 和 拼写检查的索引库,所以要先配置 spell 功能,配置如下: 在solrcon

利用easyui的行编辑自动增加一行来进行增删有详细注解

jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 javascript 应用的必要的功能. 使用 easyui,您不需要写太多 javascript 代码,一般情况下您只需要使用一些 html 标记来定义用户界面. HTML 网页的完整框架. easyui 节省了开发产品的时间和规模. easyui 非常简单,但是功能非常强大. 先给大家展示效果图:

easyui的combobox的自动填充方法

HTML代码: <select id="LogType" name="LogType" class="easyui-combobox" style="width: 157px;" required="false" missingmessage="请选择" data-options="panelHeight:'auto',method: 'get',valueField:

easyUI中combobox的使用心得

纯属分享自己的心得,若对大家有用,那真是极好的~ 1.editable:true + hasDownArrow:false 可以作为一组打造自动提示输入框的好基友,再也找不到下拉框的影子了~ 2.onChange事件可以在有级联项时,作为清空级联项值的一个扩展点.但是并不能作为载入级联项值的地方,因为此时主combobox还没选中呢 3.载入级联项值的地方应该是在onSelect事件中,function中传入有参数rec,也就是选中的那条记录 4.onBeforeLoad函数会在两种情况下触发:

[DevExpress]利用LookUpEdit实现类似自动提示效果

原文:[DevExpress]利用LookUpEdit实现类似自动提示效果 关键代码: public static void BindWithAutoCompletion(this LookUpEdit lue, object source, string value, string displayName, string prompttext) { lue.Properties.DataSource = source; lue.Properties.DisplayMember = displa

EasyUI 通过 Combobox 实现 AutoComplete 效果

朋友在做一个web程序,用的EasyUI框架,让我帮忙实现一个自动提示功能.由于之前我也没用过EasyUI框架,就想到了jQueryUI有 AutoComplete 插件,就想直接拿过来用. 但当我将jQueryUI集成到项目中时,发现 AutoComplete 插件没有效果.百度发现jQueryUI的AutoComplete 插件和 EasyUI 有冲突,用不了... 既然不行就只能另行找办法了,看到别人回复中提到 EasyUI 框架自带的 Combobox 就可以实现自动提示功能.于是就去官