2011-01-27 70 views
0

按照jQuery UI的,你应该设置自动完成源后创建/初始化如下:jQuery UI自动完成 - 在_create/_init不工作后设置源?

$( “.selector”).autocomplete( “选项”, “源”,[ “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

的原因,这是行不通的是,组合框样本实际创建的输入和autocomplete插件适用于而不是select您在叫combobox()

/* 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使用最后一种方法,似乎工作没关系