让jQuery UI的autocomplete支持中文

今日使用jQuery UI的autocomplete,发现IE下输入中文后可以自动搜索,在火狐下输完一个字后,还必须按一下才会搜索,而且这个bug已经出现很久了,google了一下发现从2010年就有人提这个问题。

网上也有搜到解决方法,是修改jquery.ui.autocomplete.js这个文件:

jQuery UI版本:1.8RC2
文件名:jquery.ui.autocomplete.js
修改方法:在第90行添加以下代码

[code lang=”js”]

.bind("input.autocomplete", function() {
// 修复在Firefox中不支持中文的BUG
self.search(self.item);
});>

[/code]

jq_ui_autocomplete_fix

不过对于以后升级UI或者使用min版ui,都不方便,我是直接在调用autocomplete()时增加了这个绑定事件,也一样解决了问题。

[code lang=”js”]
$(this)
.autocomplete(
{
source: function (request, response) {
$.ajax({
url: ac_url,
dataType: "text",
cache:true,
data: {
q: request.term
},
success: function (data) {
response($.map(data.split("\n"), function (item) {
return {
label: item,
value: item
}
}));
}
});
},
width: $(this).width(),
minLength: 0,
autoFill: false,
delay: 500,
max: 30,
select: function (event, ui) {
if (ui.item) {
this.value = ui.item.label;
if ($(this).attr("datamap")) { $(this).dataMap(); }
}
}
}
).addClass("ac_input")
.bind("dblclick", function () {
$(this).autocomplete("search", this.value);
})
.bind("input.autocomplete", function () {
// 修复在Firefox中不支持中文的BUG
$(this).autocomplete("search", this.value);
});
}
[/code]