Ну, на мой взгляд, мало что можно сделать без грязного кодирования.
Хотя есть способ ограничить изменение.Он состоит в том, чтобы отменить привязку исходного обработчика событий keydown
, связанного с плагином, и повторно связать событие с вашим измененным обработчиком (основанным, конечно, на исходном).
Это не очень сложно, ключ для выполненияэто чтобы получить экземпляр плагина, который сохраняется на элементе в виде 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 для иллюстрации.