(
response
事件)在搜索完成后,在显示菜单之前触发。对于建议数据的本地操作很有用。
和
(
ui.content
参数)包含响应数据,可以修改以更改将显示的结果。
Hoewever,如果我在ui.content
事件上修改response
,它不会影响下拉列表中显示的结果,而是忽略我的代码。这是我的(测试)代码:
$('input.autocomplete').autocomplete({
source: new Array({label: 'test1', value: 'test1'}, {label: 'test2', value: 'test2'}),
response: function( event, ui ) {
ui = {content: new Array({label: 'test3', value: 'test3'}, {label: 'test4', value: 'test4'})};
}
});
理论上,如果术语是“t”,它应该显示 test3 和 test4 作为我的自动完成选项,但事实并非如此。我得到 test1 和 test2 。
我错过了什么?
我正在使用版本1.9.2,以防您想要指向this thread。
答案 0 :(得分:11)
如果您尝试使用source
属性设置搜索来源,而不是拦截response
,该怎么办?请看this fiddle。
它基本上是这样做的:
$("input.johndoe").autocomplete({
source: [
"test1",
"test2",
"test3"
...
],
...
P.S。它来自这个问题:Detecting no results on jQuery UI autocomplete
编辑1 :好吧。如果你在响应事件中的某个时刻设置了console.log(比如in this example),它会告诉你ui.content有两个元素,即使搜索没有返回结果。所以,看起来问题是在回调中发送更新的ui。还在看......
编辑2 :得到了某种方式。看看这个更新的jsfiddle。它清除内容数组并设置新数组。仍在猜测为什么它在ui.content = [];
之后不会变空,这有点让我很烦。也许这与它在JQuery对象中的事实有关(即使它被定义为一个纯粹而简单的数组。
我只是使用push方法将所需的键值组合放入数组中。
// Set default content
for ( var i = 0; i = ui.content.length; i++ ) {
ui.content.pop();
}
ui.content.push({ label: "pepe", value: "pepe" });
它有效,因为它总是显示所需的建议列表。希望它有所帮助,也许其他人会找到更优雅的解决方案。
Edit3 :只是添加@andrewWhithaker建议的解决方案,因为它也可以正常工作(如果原始内容数组太大则没有检查是否需要更长的时间)。
它改变整个流行音乐并用一个拼接推动前一个方法。
ui.content.splice(0, ui.content.length, { 'label': 'test3', 'value': 'test3' });