Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将新结果附加到打开的jQuery自动完成菜单_Javascript_Jquery_Autocomplete - Fatal编程技术网

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

Javascript 将新结果附加到打开的jQuery自动完成菜单,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我有一个应用程序,其中我有多个搜索源。以前,用户必须在搜索之前选择要搜索的源。如果他们没有选择,应用程序将默认为其中一个选项 但是,现在他们希望同时搜索所有来源。这已经足够好了,但问题是当其中一个搜索返回时,它会覆盖以前的搜索结果。这是人们期待的行为。我基本上想要的是将新结果附加到已经打开的“自动完成”菜单中,而不是覆盖旧结果。当然,自动完成菜单在关闭时必须清空 我想这是可能的,但什么方法是最好的?我可以只使用一个数组,我将结果附加到该数组中,然后覆盖_renderMenu以使用该数组,而不是传

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

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

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

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

一些代码: 好的,所以searchAction最终由jquery自动完成调用。在collection.search中,我执行ajax调用,在这里根据this参数创建URL,然后调用respondwithdata,并将搜索结果映射到适当的格式,即自动完成菜单的值和标签。从respondWithData调用Response后,jquery自动呈现resultsmenu。因此,我可能必须覆盖响应事件函数以及_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将显示我想要的内容。
我想这是可行的,但并不完美。

我能猜出你的场景看起来如何,但我猜:

你应该喜欢:

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

您不需要覆盖myResultsDiv,而需要像以下那样附加结果:

function search1() {
   $.ajax({ ...
      success: function(data) {
         $('#myResultsDiv").append(data)
      }
   });    
}
编辑:您还可以执行以下操作:

var结果数组=[]; var-searchDone=0; var totalSearchs=5//假设5次搜索

功能搜索1{

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

      }
   });    
}

请为搜索帖子backDone添加一些代码,但我不确定它有什么帮助:你能告诉我们你使用的是哪个jQuery自动完成插件吗?那里有很多自动完成插件。它来自jQuery UI-v1.10.3Thanks,但我不想同步所有搜索,原因很明显,即用户需要等待更长的时间,如果有呢失败等。所有搜索都通过相同的ajax调用,但URL不同。不过,您的解决方案并不能真正帮助我完成自动完成,因为在成功回调之后会发生这种情况。即,自动完成调用其响应函数,以及rendermenu和item。