首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以重写jquery自动完成插件的_create函数?

是否可以重写jquery自动完成插件的_create函数?
EN

Stack Overflow用户
提问于 2011-12-20 13:32:59
回答 2查看 570关注 0票数 2

可以重写自动完成插件的_create函数吗?

如果是的话,正确的方法是什么?

我想要重写create函数,因为我遇到了以下问题:

问题:

1.上下箭头键

如果上下箭头键,

autocomplete插件具有event.preventDefault();因此,即使菜单不可见,也会阻止文本区域内插入符号的移动。

2.转义键

在我的示例中,如果在输入文本区域时按转义键,则必须清除

文字区。但是,自动完成插入重置在文本区域中键入的值,以防按下转义键。

那么,您能建议我如何重写jquery自动完成插件的_create函数吗?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2011-12-20 13:43:16

要覆盖_create函数,请执行以下操作:

代码语言:javascript
运行
复制
$.ui.autocomplete.prototype._create = function () {
    // new create function
}

另一种方法是简单地更改jquery.ui.autocomplete.js的源代码并包含已更改的文件。

票数 0
EN

Stack Overflow用户

发布于 2011-12-20 16:27:42

好吧,在我看来,没有肮脏的编码你就没什么办法了。

不过,有一种方法可以限制这种改变。它将解除绑定在插件中的原始keydown事件处理程序,并使用修改后的处理程序重新绑定事件(当然是基于原来的处理程序)。

这并不是很复杂,关键是获取插件实例,该实例以jquery的形式使用$(this).data('autocomplete');保存在元素上。

下面是代码:

代码语言:javascript
运行
复制
$('#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;
        }
    });

这里是一个 小提琴 来说明.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8576266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档