Повторно отображать список результатов на AutoCompleteExtender через JavaScript - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть рабочая реализация AutoCompleteExtender.

Что я хочу, так это то, что если я вышел из текстового поля и список элементов исчез, я хочу повторно отобразить список из кода JavaScript без необходимости что-либо снова писать в текстовом поле (просто повторно отобразить список на основе текущего значения фильтра в текстовом поле, нажав на кнопку или что-то).Я знаю, как получить объект AutoCompleteExtender Behavior из кода, поэтому все, что мне нужно, это знать API javascript для этого объекта, который позволяет мне снова отображать список.


Я пробовал это, как предложено вкомментирует этот ответ , но не работает:

AutoCompleteEx.showPopup();

Я также пробовал это, как предложено в этом ответе , но не работает:

AutoCompleteEx._onTimerTick(AutoCompleteEx._timer, Sys.EventArgs.Empty);

РЕДАКТИРОВАТЬ:
После некоторого исследования внутреннего кода, используемого AutoComplete, я думаю, что, возможно, проблема в том, что после показа он проверяет будущие вызовы, еслизначение в окне поиска изменилось с прошлого раза, и если нет, оно не будет отображаться снова.Я не узнал, как это обойти.Я пробовал разные подходы, чтобы сбросить значение, а затем установить значение снова, но безуспешно.

1 Ответ

3 голосов
/ 01 декабря 2011

Наслаждайтесь :).Это была интересная задача.

function redisplayAutocompleteExtender() {
    var extender = $find("AutoCompleteEx");
    var ev = { keyCode: 65, preventDefault: function () { }, stopPropagation: function () { } };
    extender._currentPrefix = "";
    extender._onKeyDown.call(extender, ev);
}

Или вы можете установить для свойства EnableCaching значение true на расширителе и использовать скрипт ниже.Это решение позволяет избежать дополнительных вызовов веб-службы.

function redisplayAutoComplete() {
     var extender = $find("AutoCompleteEx");
     var textBox = extender.get_element();
     textBox.focus();
     var showSuggestions = function(){
          extender._update.call(extender, textBox.value, extender._cache[textBox.value], true);
     };
     setTimeout(showSuggestions, 0);
}
...