2013-10-17 73 views
5

我正在使用JQuery 1.8.3和JQuery UI 1.8.24。JQuery UI自動完成:.data(...)未定義[但只有當我添加第二個自動完成框]

這是代碼,這工作得很好:



    $(function() { 
     $("#").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        url: '', type: "POST", dataType: "json", 
        data: { searchPattern: request.term }, 
        cache: false, 
        success: function (data) { 
         response($.map(data, function (item) { 
          return { label: item.Label, value: item.Value, id: item.Id, description: item.Description } 
         })) 
        } 
       }); 
      }, 
      delay: 300, 
      minLength: 2, 
      autoFocus: true 
     }) 
     .data("autocomplete")._renderItem = function (ul, item) { 
      return $("li>/li>") 
      .data("ui-autocomplete-item", item) 
      .append("a>" + item.label + "br>div style=\"font-size:x-small;font-style:italic;\">" + item.description + "/div>/a>") 
      .appendTo(ul); 
     }; 
    }); 

但是,如果我添加第二個文本框的HTML,複製上面的JavaScript和改變選擇和URL(所以最後我有兩個自動完成文本框),然後我得到以下錯誤第二自動完成:

TypeError: $(...).autocomplete(...).data(...) is undefined 

有了一個自動完成它的作品完美,但第二個不 我無法解釋爲什麼。有人可以幫助我嗎?

在此先感謝!

託比

編輯:

我發現這個問題。

JavaScript代碼位於* .js文件中,兩個文本框位於兩個不同的* .thml文件中。

因此,一次只有一個文本框,這是問題所在。

現在我做的最後一部分(與數據(...))在* .html文件,它工作正常:

$("#selector").autocomplete().data("autocomplete")._renderItem = renderItem; 

感謝您的幫助!根據它應該是最新的文檔(v1.10.x):

+0

在'return $(「li>/li>」)''中有無效的標記。這是一個錯字嗎?這肯定會造成問題。 –

+0

是的,我知道。這只是因爲我不知道如何在stackoverflow.com上發佈HTML標籤。所以我決定刪除第一個「<」。 – Toby

+0

@Toby:粘貼代碼,選擇它,然後按Ctrl + K. Tada! –

回答

6

有在UI 1.9

的jQuery 1.9/1.10刪除鍵autocomplete並添加uiAutocomplete

.data("uiAutocomplete") 

請注意是change in the data key naming convention。數據(「ui-autocomplete」) (請參閱:http://jqueryui.com/autocomplete/#custom-data

+0

謝謝,但我已經測試過了。我也使用JQuery 1.8.3和JQuery UI 1.8.24。 – Toby

+0

@Toby您的選擇器'$(「#」)'可能也是一個問題......看起來像是在#後面遺漏了id# –

+0

謝謝!我發現了這個問題,參見上文。謝謝你的幫助! – Toby

1

有一天,我遇到了同樣的問題,但它與我使用的版本無關但簡單地說,未完成的元素不存在!嘗試

alert($('...').length); 

並確保它不爲零。

0

您可以實現下面提及的線

.autocomplete( 「實例」)._ renderItem =函數

instate的

。數據

(UL,項目){ ( 「自動填充」)。_renderItem =函數(ul,item){

根據Jquery站點提供的文檔JQuery AutoComplete Funtionality你會發現這個代碼。

從升級版本的jquery 1.10他們已經在代碼中進行了更改。希望這會幫助你。