2013-07-18 2 views
1

Я использую jquery ui autocomplete в содержимом редактируемого div. Использование @ в качестве триггера. Проблема в том, что даже если я установил фокусное событие для возврата false:JQuery UI Autocomplete вверх ключ очищает html в моем div

focus: function() { 
    return false; 
    }, 

При использовании стрелок вверх и вниз. Если я нахожусь в первом элементе и нажимаю клавишу «вверх». Или, если я пришел к последнему результату и использую клавишу «вниз». jquery ui autocomplete очищает все элементы html внутри div.

Можно увидеть здесь http://jsfiddle.net/YGP8a/

Любая идея, почему или, если есть все, что я могу сделать, чтобы исправить это? Благодаря!

ответ

4

При нажатии вверх или вниз из меню внутренняя функция вызывается, которая заменяет все, что у вас есть в вашем DIV с request.term и тем самым стирая свои входы, потому что, как вы можете видеть в console.log(term) вашей скрипке, response.term имеет только текст (игнорируя введенные вами входы).

Так что, посмотрев исходный код jquery-ui autocomplete, так же, как вы переписываете _rederItem, я переписал функцию _move и, похоже, сработал.

Вот ваш скрипт, отредактированный http://jsfiddle.net/YGP8a/1/.

Надеюсь, что это поможет!

EDIT:

Для полноты картины, это то, что вам нужно добавить:

$("#testDiv").data("autocomplete")._move = function(direction, event) { 
    if (!this.menu.element.is(":visible")) { 
     this.search(null, event); 
     return; 
    } 
    if (this.menu.isFirstItem() && /^previous/.test(direction) || 
      this.menu.isLastItem() && /^next/.test(direction)) { 
      //this._value(this.term); <-- Here it is! 
     this.menu.blur(); 
     return; 
    } 
    this.menu[ direction ](event); 
} 
+0

Удивительно. Спасибо, Nefreo! Работала отлично. – mstef

+0

Если вы откроете диалоговое окно и нажмите клавишу эвакуации, это также очистит все элементы внутри текстового поля ... – Zhe

+0

@Zhe Thats, потому что при создании виджета jQuery связывает некоторые события с реализацией по умолчанию. Чтобы решить эту проблему, вы должны переопределить событие «keydown» виджета (это очень много кода). Вы можете видеть это [здесь] (http://jsfiddle.net/YGP8a/2/). Я не знаю, должен ли я обновлять ответ с помощью этой информации. – Nefreo