luc*_*ina 9 jquery jquery-ui jquery-ui-autocomplete
来自JQuery UI文档:
(
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'})};
}
});
Run Code Online (Sandbox Code Playgroud)
理论上,如果术语是"t",它应该将test3和test4显示为我的自动完成选项,但事实并非如此.我得到test1和test2.
我错过了什么?
我正在使用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)