jQuery UI Autocomplete Widget:在"response"事件中修改响应数据没有任何效果

luc*_*ina 9 jquery jquery-ui jquery-ui-autocomplete

来自JQuery UI文档:

(response事件是)在搜索完成之后,在显示菜单之前触发.对于建议数据的本地操作很有用.

(ui.content参数)包含响应数据,可以修改以更改将显示的结果.

Hoewever,如果我ui.contentresponse事件进行修改,它不会影响下拉列表中显示的结果,而是忽略我的代码.这是我的(测试)代码:

$('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'})};
    }
});
Run Code Online (Sandbox Code Playgroud)

理论上,如果术语是"t",它应该将test3test4显示为我的自动完成选项,但事实并非如此.我得到test1test2.

我错过了什么?

我正在使用1.9.2版,以防你想要指向我的这个帖子.

Alf*_*avo 11

如果您尝试使用source属性设置搜索源,而不是拦截response?看看这个小提琴.

它基本上是这样做的:

$("input.johndoe").autocomplete({
        source: [
            "test1",
            "test2",
            "test3"
            ...
            ],
        ...
Run Code Online (Sandbox Code Playgroud)

PS它来自这个问题:检测jQuery UI自动完成没有结果

编辑1:好吧.如果在响应事件中的某个时刻设置了console.log(如本示例所示),它将告诉您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" });
Run Code Online (Sandbox Code Playgroud)

它起作用,因为它总是显示所需的建议列表.希望它有所帮助,也许其他人会找到更优雅的解决方案.

编辑3:只是添加@andrewWhithaker建议的解决方案,因为它也可以工作(没有检查是否需要更长的时间,以防原始内容数组太大).

拼接小提琴

它改变整个流行音乐并用一个拼接推动前一个方法.

 ui.content.splice(0, ui.content.length, { 'label': 'test3', 'value': 'test3' });
Run Code Online (Sandbox Code Playgroud)

  • 这与对象在JavaScript中传递给方法的方式有关.你不能*替换*`ui.content`,但你可以*修改它.查看[此答案](http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language)了解更多信息. (2认同)