使用.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); });