jQuery UI自动完成 - 在_create / _init无效后设置源码?

时间:2011-01-27 15:17:03

标签: jquery user-interface autocomplete

根据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个字符以启动自动完成操作后,我收到错误,指出源未设置。有什么想法吗?

1 个答案:

答案 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 ,似乎工作正常。