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

问题描述:

我有一个应用了jQuery ui自动完成插件的jQuery textarea。我注意到,即使未显示自动填充建议,使用箭头上下移动也不起作用。只有正确和左侧。jQuery自动完成禁用textarea中的向上/向下箭头。为什么?

任何想法为什么以及如何解决?这是一个选项吗?当自动填充选项打开时,我明白上下是被禁用的,但是如果他们不打开为什么禁用?

由于

的自动填充实施结合该插件被施加到元件本身上的“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; 

我能够使用ISOPEN布尔追踪自动完成组件的状态,以解决此问题的自动完成功能的unminified版本。

这在文件的顶部:

(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; 

这应该可能被折叠成真正的版本,但我确定如何去做到这一点。

+0

不错的解决方案。我想知道他们是否已经在UI 1.9中解决了这个问题。 – Hawkee

看起来这将是固定在即将到来的1.9版本:

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

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

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

一1.9的好处是autocomplete现在支持contenteditable divs。