最近在使用jquery 的 autocomplete 插件,遇到几个问题,分享一下解决方案。
firefox下的问题
1、支持中文输入: (在IE等非firefox浏览器下可以准确的匹配中文字符,但firefox下却没有任何匹配,该方案里利用firefox的oninput事件来修正hack一下,解决!)
修改199行处:
}).bind("unautocomplete", function() { select.unbind(); $input.unbind(); $(input.form).unbind(".autocomplete"); }).bind("input", function() { // @hack by liqt:support for inputing chinese characters in firefox onChange(0, true); });
2、支持多次回车选定:(同样的看注释就可以了,除了opera,firefox 3.0以上在支持多回车上的“keydown”会有问题,与opera一样用‘keypress’解决!)
修改91行:
// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
修改为:
// only opera mozilla doesn't trigger keydown multiple times while pressed, others don't work with keypress at all $input.bind((($.browser.opera || $.browser.mozilla) ? "keypress" : "keydown") + ".autocomplete", function(event) {
autocomplete 接受参数改进:
原始设计中autocomplete数据源只能是json数组,对象或者经过ajax返回的json数组的url,现改进一些,允许其接受一个函数对象,并且在该函数内处理。代码如下:
var isUrl = typeof urlOrData == "string"||typeof urlOrData == "function"; // 加入函数支持,也当url处理,最小化修改代码
//在第340几行function request(term, success, failure)内部加入函数处理的分支
..... }else if(typeof(options.url) == "function"){ options.url.apply(null,[term,function(data){ if (data != null && data.length > 0) { found = true; var parsed = options.parse && options.parse(data) ||parse_json(data); // set autocActive to true, to open auto active when user are typing. success(term, parsed); return; } }]); } .......
最近考试,都没来看看友链博客了~
今天PR更新~你的博客PR2了,呵呵,共同进步哈。。
希望有时间多走动~~~
测试