最近工作中用到了jquery.autocomplete,稍有体悟,与大家共同探讨。
主要遇到了这么几个问题:1.ajax查询 2.全模糊匹配 3.中文乱码
事实上,我犯了一个相当2的错误,当时不知道怎么脑子秀逗。这个问题居然想到的是手动用jquery的ajax去后台匹配数据,自己拼装成json,然后传给autocomplete。。。
而人家控件已经有提供了对应的方法。而实际上,看js,autocomplete: function(urlOrData, options)已经明确提示可以是url或者是数组了。我当时的做法是监听控件的keyup事件,手动在success的时候获取值拼成数组以后传给autocomplete。。正确的用法就是把请求直接发给控件就可以了。
例如:
$("#singleBirdRemote").autocomplete("xxxx.do", {
width: 260,
selectFirst: false,
....
});
那后台如何获取参数呢,看function request(term, success, failure)这个函数的定义,jquery.autocomplete.js在344行,里面有参数
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams)
里面的q就是了。后台servlet接收的时候用request.getParameter("q")就可以拿到。这里正好带入第三个问题,中文乱码。考虑到国内的使用,建议大家直接改这里的函数,在q的这段加上q: encode(lastWord(term)),后台使用URLDecoder(q,"utf-8");就可以正确取到了。
我用到的最坑爹的就是全模糊匹配了。当然处理也简单,在后台对q用split进行分割,中间加上%就可以直接在sql语句里使用了。但是带来新的问题就是往往一次输入会带来多次请求,取到的内容显示也不是特别稳定,似乎控件也不是很支持这种做法。期望有同胞能指点。
第10版的控件可到我的资源中下载,不收手续费