通过javascript在AutoCompleteExtender上重新显示结果列表

时间:2011-11-25 12:50:17

标签: javascript asp.net ajaxcontroltoolkit autocompleteextender

我有一个有效的AutoCompleteExtender实现。

我想要的是,如果我退出文本框,并且项目列表已经消失,我想从javascript代码重新显示列表,而无需再次在文本框中写入内容(只需重新显示列表)基于文本框中的当前过滤器值,通过单击按钮或其他内容)。我知道如何从代码中获取AutoCompleteExtender Behavior对象,所以我只需知道该对象上的javascript API,使我能够重新显示列表。


我按照this answer的评论中的建议尝试了此操作,但没有正常工作:

AutoCompleteEx.showPopup();

我也按照this answer中的建议尝试了此操作,但没有工作:

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

修改
在对AutoComplete使用的后端代码进行一些调查之后,我想可能问题是,一旦显示,它会检查未来的调用,如果搜索框中的值自上次以来发生了变化,如果没有,则不会显示再次。我还没有发现如何解决这个问题。我尝试了不同的方法来重置值,然后再次设置值,但没有成功。

1 个答案:

答案 0 :(得分:3)

享受:)。这是一项有趣的任务。

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

或者您可以在扩展器上将EnableCaching属性设置为true并使用下面的脚本。此解决方案允许避免额外的Web服务调用。

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);
}