全
可以重写自动完成插件的_create函数吗?
如果是的话,正确的方法是什么?
我想要重写create函数,因为我遇到了以下问题:
问题:
1.上下箭头键
如果上下箭头键,
autocomplete插件具有event.preventDefault();因此,即使菜单不可见,也会阻止文本区域内插入符号的移动。
2.转义键
在我的示例中,如果在输入文本区域时按转义键,则必须清除
文字区。但是,自动完成插入重置在文本区域中键入的值,以防按下转义键。
那么,您能建议我如何重写jquery自动完成插件的_create函数吗?
提前感谢
发布于 2011-12-20 13:43:16
要覆盖_create函数,请执行以下操作:
$.ui.autocomplete.prototype._create = function () {
// new create function
}
另一种方法是简单地更改jquery.ui.autocomplete.js的源代码并包含已更改的文件。
发布于 2011-12-20 16:27:42
好吧,在我看来,没有肮脏的编码你就没什么办法了。
不过,有一种方法可以限制这种改变。它将解除绑定在插件中的原始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;
}
});
这里是一个 小提琴 来说明.
https://stackoverflow.com/questions/8576266
复制相似问题