jQuery自动完成功能禁用textarea中的向上/向下箭头。为什么?

时间:2011-11-01 22:12:21

标签: jquery jquery-ui autocomplete

我有一个应用了jQuery ui autocomplete插件的jQuery textarea。我注意到即使没有显示自动填充建议,使用箭头上下移动也不起作用。只有左右。

任何想法为什么以及如何解决?这是一个选择吗?我知道在自动填充选项打开时上下都被禁用,但如果它们未打开则为什么禁用?

由于

3 个答案:

答案 0 :(得分:1)

我能够使用isOpen布尔值在未完全版本的自动完成中解决此问题,以跟踪自动完成组件的状态。

这位于文件的最顶层:

(function( $, undefined ) {

var requestIndex = 0;
var isOpen = false; // NEW

然后在_suggest函数的顶部:

isOpen = true; // NEW

然后在关闭功能的顶部:

isOpen = false; // NEW

然后在键绑定功能中:

case keyCode.UP:
self._move( "previous", event );
if ( isOpen )                 // NEW
     event.preventDefault();  // NEW
break;
case keyCode.DOWN:
self._move( "next", event );
if ( isOpen )                 // NEW
     event.preventDefault();  // NEW
break;

这可能应该被折叠到真正的版本中,但我不确定如何实现这一目标。

答案 1 :(得分:0)

自动填充实施绑定' keydown'应用插件的元素本身上的事件,它可以防止默认行为。

我想这个插件原本打算用在文本字段而不是textarea上。

this.element
    ...
    .bind( "keydown.autocomplete", function( event ) {
        if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
            return;
        }

        suppressKeyPress = false;
        var keyCode = $.ui.keyCode;
        switch( event.keyCode ) {
            ...
            case keyCode.UP:
                self._move( "previous", event );
                // prevent moving cursor to beginning of text field in some browsers
                event.preventDefault();
                break;
            case keyCode.DOWN:
                self._move( "next", event );
                // prevent moving cursor to end of text field in some browsers
                event.preventDefault();
                break;

答案 2 :(得分:0)

看起来这将在即将发布的1.9版本中修复:

http://bugs.jqueryui.com/ticket/7639

您可以编辑当前版本或尝试不完整的1.9:

https://github.com/jquery/jquery-ui

关于1.9的一个好处是autocomplete现在支持contenteditable div。