Select2用法简介

按照产品汪的要求终于做完了数据展示,前台后台一锅端的感觉只有试过才知道~

谁知道提测完毕汪又要求加上按产品名称模糊搜索功能(怨念难过),后台代码当然是简单又轻松,但是前台的搜索框怎么搞!

学校里主要研习后端但是在公司还要兼做前段,捯饬JS着实头疼啊~

但是又不能不搞,现成代码相当多,但是注释以及方法参数的解释都十分的少,导致像我这么笨的人学起来相当吃力啊

好在有时间乐的自己慢慢测试用法,有了收获就得善于总结不是,趁热乎赶紧记下来...

选用功能强大的Select2来实现搜索功能,类似AutoComplete的功能正是我所需要的(官网参见http://select2.github.io/

但是数据过多,产品表有3W余条数据,不可能全部在前端交由用户筛选,故此搜索框至少要求输入一个字符之后才会显示下拉框

按照输入的字符利用AJAX进行异步查询,然后再将结果交由用户进行选择

页面只要有个简单的INPUT框就可以

<input style="width: 300px" id="test" />

前台JS代码如下

$('#test').select2({
	placeholder: "请输入",  
	minimumInputLength: 1,  //最低输入字符数
	separator: ",", // 分隔符  
	maximumSelectionSize: 1, // 限制数量  
	ajax: {
		url: '<%=request.getContextPath()%>/stuffConsumptionDetail/queryProductList.mmx',
		type : "POST",
		dataType : 'json',
		quietMillis : 100,
		data : function(term) {
			term = escape(encodeURIComponent(term));
			return {
				productName : term
			};
		},
		results : function(data) {
		var myResults = [];
		$.each(data, function(index, item) {
			myResults.push({
				'id' : item.pcode,
				'text' : item.pname
			});
		});
		return {
			results : myResults
		};
		}
	}
});
之前一直出现 TypeError: data.results is undefined的错误

究其原因是因为Select2用的是JSONP而不是JSON的格式(区别参见http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html

所以如下这段代码的用处也就不言而喻了~

$.each(data, function(index, item) {
			myResults.push({
				'id' : item.pcode,
				'text' : item.pname
		});
	});
同时有一个需要注意的问题就是汉字传输问题

经试验如果输入汉字传输会变成乱码,所以传输时要进行编码解码,然而编码结束后后台接到参数调用java.net.URLDecoder.decode(productName,"UTF-8");后发现解码并不好使

经测试发现如下语句会进行两次编码,此处深坑!

escape(encodeURIComponent(term))
所以解码是应进行两次编码

此时就可以完美支持汉字了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值