将新结果附加到打开的jQuery自动完成菜单

时间:2014-10-03 08:56:49

标签: javascript jquery autocomplete

我有一个应用程序,其中有多个搜索源。以前,用户必须在搜索之前选择要搜索的来源。如果他们没有选择,应用程序将默认为其中一个选项。

但是,现在他们想要同时搜索所有来源。这很好,但问题是当其中一个搜索返回时,它会覆盖以前的搜索结果。非常期待的行为。我基本上想要的是将新结果附加到已经打开的自动完成菜单,而不是覆盖旧的结果。当然,自动完成菜单在关闭时必须清空。

我想这是可能的,但最好的方法是什么?我想我可以有一个数组,我将结果附加到然后覆盖_renderMenu以使用此数组而不是传递给函数的项目。然后在关闭事件中清空所述数组。

这是最好的方式吗?还是有更优雅的解决方案?

一些代码: 好的,所以最终通过jquery自动完成调用searchAction。在collection.search中我执行ajax调用,此处URL是基于 this 参数创建的,然后调用respondWhithData并将搜索结果映射到适当的格式(即自动完成菜单的值和标签) )。从respondWithData调用响应后,jquery自动呈现结果菜单。因此,我可能不得不覆盖响应事件函数以及_renderMenu和可能_renderItem,是吗?

searchAction: function(searchTerm, collection, response){
    var self = this;
    $.when(collection.search(searchTerm, this)).then(function(data) {
        self.respondWithData(data, response);
    });
},
respondWithData : function(data, response) {
    if (data.length > 0) {
        var responseVal = _.map(data, this.mapData);
        this.checkResponseCount(responseVal);
        response(responseVal);
    }
    else {
        response(this.emptyResult());
    }
},

要清楚,问题不在于多重搜索本身,而是呈现异步结果。我想呈现返回的第一个结果,然后在从服务器返回后立即附加其余结果。

编辑2: 只是尝试在autocompleteresponse事件中编辑ui.content,但由于某种原因,任何编辑都不会呈现...

编辑3:啊,ui.content只能直接修改,不能改变。如果我推动每一个更改而不是结束两个数组ui.content显示我想要的。 我觉得它很有用,但它并不完美。

1 个答案:

答案 0 :(得分:0)

我可以看出你的情景如何,但我猜测:

你应该喜欢:

function search1() {
   $.ajax({ ...
      success: function(data) {
         $('#myResultsDiv").html(data)
      }
   });    
}

您需要将结果添加为:

,而不是覆盖#myResultsDiv
function search1() {
   $.ajax({ ...
      success: function(data) {
         $('#myResultsDiv").append(data)
      }
   });    
}

编辑:你也可以这样做:

var resultsArray = []; var searchDone = 0; var totalSearchs = 5; //假设5次搜索

function search1(){

function search1() {
   $.ajax({ ...
      success: function(data) {
         //APPEND data to resultsArray
         searchDone++;
         if(searchDone==totalSearch) //syncronize the 5 searchs before render
            renderSearchs(resultsArray);

      }
   });    
}