2010-04-16 142 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({ 

    }); 
});