jquery autocomplete改进

最近在使用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;
	}
         }]);
   }
.......

2 comments to jquery autocomplete改进

Leave a Reply to 大风

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Protected by WP Anti Spam