2010-04-16 83 views
3

我已經根據文檔設置了JQuery UI自動完成功能,它適用於任何帶有class =「tag-item」輸入的頁面。然而,用戶可以通過JS將輸入添加到dom中,所以我需要一種方法將自動完成綁定到使用委託創建的新動態輸入。我不知道如何設置這個,任何想法將不勝感激。jquery ui自動完成與委託

謝謝

+0

在我看來這個解決方案的氣味,但我最終只是包裹在一個函數的代碼和調用功能齊全的功能,新的輸入注入後DOM。據我可以告訴我將不得不改變自動完成的代碼,使其與委託工作。我100%肯定有更好的方法,所以這是一個評論,而不是一個明顯的答案。 – Paul 2010-04-16 18:11:00

回答

7

您可以使用'focusin'事件進行委派來設置您的輸入字段。

See this post

+0

A ++++會再次購買。感謝您的好鏈接。 – Nathan 2011-06-08 05:59:22

+2

這就是爲什麼鏈接到一個答案是壞的... – KrisF 2015-03-01 05:37:36

+0

@KrisF,你把我的嘴裏的話...逐字! :-( – PeterKA 2015-06-18 03:29:47

2

我曾在此一展身手,可就是不能使它工作,這是我的嘗試:

http://jsfiddle.net/uGdm2/

+0

只是添加:http://jsfiddle.net/uGdm2/3/似乎比你引用的版本更好:) – 2011-06-29 21:03:48

+0

我不認爲這是更好的,不。 – HM2K 2011-07-08 15:23:50

+0

你有幾個錯誤: http://jsfiddle.net/uGdm2/65/ javascript:void(0)比javascript更好用:false 你錯過了a)第一個函數之後。 而你不想克隆(true),嘗試clone()並且它不會克隆事件。 – Lathan 2012-05-08 15:18:09

4

對於它的價值,這就是我最終使用:

$('#some-container').delegate('input.to-autocomplete', 'focus', function(e) { 
    $(this).autocomplete({ 
     source: autocomplete_url 
     /* etc, etc */ 
    }); 
}); 
$('#some-container').delegate('input.to-autocomplete', 'blur', function(e) { 
    var target = $(this); 
    if (target.hasClass('ui-autocomplete-input')) { 
     target.autocomplete('destroy'); 
    } 
}); 

我的希望是,它會減輕負擔上的瀏覽器,因爲我自動填充(可能)幾百個元素然後自動完成結果,否則開始疊加。

1

對我下面的工作:

$('#autocomplete').on('focusin', 'input', function(){ 
    $(this).autocomplete({ 

    }); 
});