好吧,在我看來,沒有太多的事可以做髒編碼。
雖然有一種方法可以限制更改。它是解綁定綁定在插件中的原始事件處理程序,並將事件與修改後的處理程序(當然基於原始程序)重新綁定。
這不是很複雜,要做到這一點,關鍵是要獲取保存在元素jQuery的數據與$(this).data('autocomplete');
此處插件實例的代碼:
$('#myinput').autocomplete({ ... })
.unbind("keydown.autocomplete")
.bind("keydown.autocomplete", function(event) {
// obtain the plugin instance
var self = $(this).data('autocomplete');
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);
// disable the prevent
// event.preventDefault();
break;
case keyCode.DOWN:
self._move("next", event);
// disable the prevent
// 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:
// clear the input value on ESC
self.element.val('');
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;
}
});
這裏是一個jsfiddle來說明。
我沒有權限直接更改jquery.ui.autocomplete.js文件。還有其他的方式嗎?那麼我提到的問題是什麼,解決它們的最好方法是什麼? – Cherry 2011-12-20 13:44:54