根据jQuery UI,您应该在create / init之后设置自动完成源,如下所示:
$(“。selector”)。selfocomplete(“option”,“source”,[“c ++”,“java”,“php”,“coldfusion”,“javascript”,“asp”,“ruby”] );
以下是一些代码(基于combobox示例):
$("#item").combobox();
$("#item").autocomplete("option", "source", function (request, response) {
$.ajax({
type: "POST",
url: "itmsrch.ashx",
dataType: "json",
data: {
dept: $("#dept").val,
term: request.term
},
success: function (data) {
response($.map(data, function (item) {
return {
label: item.name,
value: item.name
}
}));
}
});
});
在键入所需的2个字符以启动自动完成操作后,我收到错误,指出源未设置。有什么想法吗?
答案 0 :(得分:1)
这不起作用的原因是组合框样本实际上创建了一个输入并将autocomplete
窗口小部件应用于 it 而不是您调用的select
combobox()
1}} on:
/* Snip */
var input = this.input = $( "<input>" )
.insertAfter( select )
.val( value )
.autocomplete({ ... });
/* Snip */
为了修改组合框内部自动完成的来源,你可以写:
$("#combobox").next("input").autocomplete("option", "source", ["Foo", "Bar"]);
或者,更一般地说,您可以将以下内容添加到插件中:
_setOption: function(key, value) {
this.input.data("autocomplete")._setOption(key, value);
}
然后使用以下方法修改自动填充选项:
$("#item").combobox("option", "source", ["Foo", "Bar"]);
我推荐这种方法。
但是,这会导致问题,因为自动填充程序select
的组合框代码的事件处理程序期望所选项具有option
属性(请查看源代码)。此外,这会破坏select
上的所有事件处理程序(例如change
)。
如果您不关心更新基础选择(我打赌您没有更改数据源),您可以完全删除select
事件处理程序
我有一个使用最后一种方法的工作示例 here ,似乎工作正常。