2011-01-27 83 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使用最後一種方法,似乎工作沒關係