使用.live()绑定jQuery UI自动完成

我到处search,但我似乎无法find任何帮助…

我有一些通过JSdynamic创build的文本框,所以我需要绑定他们所有的类到自动完成。 因此,我需要使用新的.live()选项。

例如,要将所有项目与现在和将来创build的.foo类绑定在一起:

$('.foo').live('click', function(){ alert('clicked'); }); 

它需要(和行为)与.bind()相同。 不过,我想绑定一个自动完成…

这不起作用:

 $('.foo').live('autocomplete', function(event, ui){ source: 'url.php' // (surpressed other arguments) }); 

我如何使用.live()绑定自动完成?

UPDATE

用Framer找出它:

 $(function(){ $('.search').live('keyup.autocomplete', function(){ $(this).autocomplete({ source : 'url.php' }); }); }); 

如果您使用的是jquery.ui.autocomplete.js尝试使用

 .bind("keydown.autocomplete") or .live("keydown.autocomplete") 

如果没有,使用jquery.ui.autocomplete.js ,看看它是否会工作

如果这不适用,我不知道如何帮助你兄弟

jQuery UI自动完成function自动将类“ui-autocomplete-input”添加到元素。 我build议在没有“ui-autocomplete-input”类的情况下实时绑定焦点上的元素,以防止在该元素内的每个keydown事件重新绑定。

 $(".foo:not(.ui-autocomplete-input)").live("focus", function (event) { $(this).autocomplete(options); }); 

编辑

我的答案现在已经过时了,因为jQuery 1.7,请参阅Nathan Strutz的评论用于新的.on()语法。

只需要添加,你可以使用.livequery插件来实现这个function:

 $('.foo').livequery(function() { // This will fire for each matched element. // It will also fire for any new elements added to the DOM. $(this).autocomplete(options); }); 

要为jQuery> 1.7中使用的on()事件dynamic加载时获得自动完成工作,请使用语法Nathan Strutz在其评论中提供的语法:

 $(document).on('focus', '.my-field:not(.ui-autocomplete-input)', function (e) { $(this).autocomplete(options) }); 

.my-field是您的自动完成input元素的select器。

.live()不适用于焦点。 也keyup.autocmplete没有任何意义。 相反,我尝试过的东西是这样的

  $(document).ready(function(){ $('.search').live('keyup' , function() { $(this).autocomplete({ source : 'url.php' }); }); }) 

这工作得很好。

你不能。 .live()仅支持实际的JavaScript事件,不支持任何自定义事件。 这是.live()如何工作的一个基本限制。

你可以尝试使用这个:

 $('.foo').live('focus.autocomplete', function() { $(this).autocomplete({...}); }); 

在阅读和testing其他人的答案后,我已经更新了当前版本的JQuery,并做了一些调整。

使用keydown作为调用.autocomplete()的事件的问题在于它无法为input的第一个字母自动完成。 使用重点是更好的select。

我注意到的另一件事是所有给定的解决scheme导致.autocomplete()被多次调用。 如果您将要素dynamic添加到不会再次移除的页面,则应该只触发一次该事件。 即使要删除并重新添加项目,也应该删除该事件,并在每次删除或添加元素时重新添加,以便再次关注该字段不会不必要地每次调用.autocomplete()

我的最终代码如下:

 $(document).on('focus.autocomplete', '#myAutocomplete', function(e){ $(this).autocomplete(autocompleteOptions); $(document).off('focus.autocomplete', '#myAutocomplete'); }); 

自动完成不是一个事件,而是为文本框启用自动完成function的function。

所以,如果你可以修改dynamic创build文本框的js,以包装文本框元素作为一个jQuery对象,并调用该对象的自动完成。

我只是注意到你用这个答案编辑了你的文章。 这对我来说是显而易见的,所以我在下面给他人发表。 谢谢。

 $(function() { $('.search').live('keyup.autocomplete', function() { $(this).autocomplete({ source : 'url.php' }); }); }); 

这适用于我:

 $(function() { $('.item_product').live('focus.autocomplete', function() { $(this).autocomplete("/source.php/", { width: 550, matchContains: true, mustMatch: false, selectFirst: false, }); }); }); 

您可以将自动填充放入input的现场活动中,如下所示:

 $('#input-element').live('input', function(){ $("#input-element").autocomplete(options); });