通过观察源码发现它是通过监听keydown事件实现的
.bind( "keydown.autocomplete", function( event ) {
if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
return;
}
suppressKeyPress = false;
var keyCode = $.ui.keyCode;
switch( event.keyCode ) {
case keyCode.PAGE_UP:
self._move( "previousPage", event );
break;
case keyCode.PAGE_DOWN:
self._move( "nextPage", event );
break;
case keyCode.UP:
self._move( "previous", event );
// prevent moving cursor to beginning of text field in some browsers
event.preventDefault();
break;
case keyCode.DOWN:
self._move( "next", event );
// prevent moving cursor to end of text field in some browsers
event.preventDefault();
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
// when menu is open and has focus
if ( self.menu.active ) {
// #6055 - Opera still allows the keypress to occur
// which causes forms to submit
suppressKeyPress = true;
event.preventDefault();
}
//passthrough - ENTER and TAB both select the current element
case keyCode.TAB:
if ( !self.menu.active ) {
return;
}
self.menu.select( event );
break;
case keyCode.ESCAPE:
self.element.val( self.term );
self.close( event );
break;
default:
// keypress is triggered before the input value is changed
clearTimeout( self.searching );
self.searching = setTimeout(function() {
// only search if the value has changed
if ( self.term != self.element.val() ) {
self.selectedItem = null;
self.search( null, event );
}
}, self.options.delay );
break;
}
})
可以看到在按下enter,table等特殊键时会做特殊处理,其他情况都会进行自动完成的搜索。而在输入中文时,由于各浏览器的内核不同,所触发和传递给后台的值不尽相同。通过实验(在default : 后将 self.term 和 self.element.val()的值用innerHTML的方式写入页面定义的标签,代码比较简单,就不写了。 ) 可以发现出现的是一些奇怪的值,应该和浏览器以及输入法有关。所以可以考虑给其input事件进行监听,具体代码为在文件中绑定事件的地方加上一个绑定
.bind("input.autocomplete",function( event ){
if ( suppressKeyPress ) {
suppressKeyPress = false;
event.preventDefault();
}
clearTimeout( self.searching );
self.searching = setTimeout(function() {
if ( self.term != self.element.val() ) {
self.selectedItem = null;
self.search( null, event );
}
}, self.options.delay );
})
其内容参照 keydown的default处理。这样就可以解决中文问题了。


所有评论(0)