所有
是否可以覆盖自动完成插件的_create函数?
如果是,那么正确的做法是什么?
由于我遇到的问题,我想过度编写创建函数:
问题:
1.UP和DOWN箭头键
如果是上下箭头键,
autocomplete插件正在使用event.preventDefault();因为这是预防 即使菜单不可见,textarea内的插入符号移动。
2。退出键
在我的情况下,如果我在输入文本区域时按下退出键,我将清除中的文本 文字区域。但是自动完成插件会重置文本区域中键入的值,以防万一 按下退出键。
SO, 你能建议我怎么过写jquery autocomplete插件的_create函数吗?
提前致谢
答案 0 :(得分:0)
要覆盖_create函数:
$.ui.autocomplete.prototype._create = function () {
// new create function
}
另一种方法是简单地更改jquery.ui.autocomplete.js的源代码并包含更改的文件。
答案 1 :(得分:0)
嗯,在我看来,如果没有脏编码,你就无能为力。
但是有一种方法可以限制改变。它取消绑定插件中绑定的原始keydown
事件处理程序,并将事件与修改后的处理程序重新绑定(当然基于原始处理程序)。
这不是很复杂,要做到这一点的关键是将保存在元素上的插件实例作为jquery-data与$(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来说明。