Javascript 将新结果附加到打开的jQuery自动完成菜单
我有一个应用程序,其中我有多个搜索源。以前,用户必须在搜索之前选择要搜索的源。如果他们没有选择,应用程序将默认为其中一个选项 但是,现在他们希望同时搜索所有来源。这已经足够好了,但问题是当其中一个搜索返回时,它会覆盖以前的搜索结果。这是人们期待的行为。我基本上想要的是将新结果附加到已经打开的“自动完成”菜单中,而不是覆盖旧结果。当然,自动完成菜单在关闭时必须清空 我想这是可能的,但什么方法是最好的?我可以只使用一个数组,我将结果附加到该数组中,然后覆盖_renderMenu以使用该数组,而不是传递给函数的项。然后在关闭事件中清空所述数组 这是最好的方式吗?还是有更优雅的解决方案 一些代码: 好的,所以searchAction最终由jquery自动完成调用。在collection.search中,我执行ajax调用,在这里根据this参数创建URL,然后调用respondwithdata,并将搜索结果映射到适当的格式,即自动完成菜单的值和标签。从respondWithData调用Response后,jquery自动呈现resultsmenu。因此,我可能必须覆盖响应事件函数以及_renderMenu和_renderItem,是吗Javascript 将新结果附加到打开的jQuery自动完成菜单,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我有一个应用程序,其中我有多个搜索源。以前,用户必须在搜索之前选择要搜索的源。如果他们没有选择,应用程序将默认为其中一个选项 但是,现在他们希望同时搜索所有来源。这已经足够好了,但问题是当其中一个搜索返回时,它会覆盖以前的搜索结果。这是人们期待的行为。我基本上想要的是将新结果附加到已经打开的“自动完成”菜单中,而不是覆盖旧结果。当然,自动完成菜单在关闭时必须清空 我想这是可能的,但什么方法是最好的?我可以只使用一个数组,我将结果附加到该数组中,然后覆盖_renderMenu以使用该数组,而不是传
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。