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

Binding 使用.live()绑定jQuery UI自动完成,binding,autocomplete,jquery,Binding,Autocomplete,Jquery,我到处找了,但似乎找不到任何帮助 我有一些通过JS动态创建的文本框,所以我需要将它们的所有类绑定到自动完成。因此,我需要使用新的.live()选项 例如,要使用已创建的.foo now和future类绑定所有项,请执行以下操作: $('.foo').live('click', function(){ alert('clicked'); }); 它的作用(和行为)与.bind()相同。但是,我想绑定一个自动完成 这不起作用: $('.foo').live('autocomplete', fu

我到处找了,但似乎找不到任何帮助

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

例如,要使用已创建的.foo now和future类绑定所有项,请执行以下操作:

$('.foo').live('click', function(){
  alert('clicked');
});
它的作用(和行为)与.bind()相同。但是,我想绑定一个自动完成

这不起作用:

$('.foo').live('autocomplete', function(event, ui){
  source: 'url.php' // (surpressed other arguments)
});
如何使用.live()绑定自动完成

更新

用Framer解决了这个问题:

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

自动完成不是一个事件,而是一个为文本框启用自动完成功能的函数


因此,如果您可以修改动态创建textbox的js,将textbox元素包装为jquery对象,并在该对象上调用autocomplete。

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

如果您使用的是
jquery.ui.autocomplete.js
,请尝试以下方法

.bind("keydown.autocomplete") or .live("keydown.autocomplete")
如果没有,请使用
jquery.ui.autocomplete.js
并查看它是否有效


如果这不适用,我不知道如何帮助您bro

只是为了添加,您可以使用此插件:

$('.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);
});

我刚刚注意到你用这个答案编辑了你的帖子。这对我来说很明显,所以我在下面为其他人发布。多谢各位

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

jQueryUIAutoComplete函数会自动将类“UIAutoCompleteInput”添加到元素中。我建议在焦点上实时绑定元素,而不使用“ui自动完成输入” 类,以防止在该元素中的每个keydown事件上重新绑定

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

我的答案现在已经过时了,因为jQuery1.7,请参阅Nathan Strutz的评论,以便与新的
.on()
语法一起使用。

.live()不适用于focus。 此外,keyup.autocomplete没有任何意义。 相反,我尝试过的工作是

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

这非常好。

您可以尝试使用以下方法:

$('.foo').live('focus.autocomplete', function() {
    $(this).autocomplete({...});
});
这对我很有用:

$(function() 
{
  $('.item_product').live('focus.autocomplete', function()
  { 

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

  });
});

在阅读并测试了其他人的答案后,我将其更新为JQuery的当前版本,并做了一些调整

使用keydown作为调用
.autocomplete()
的事件的问题是,它无法自动完成键入的第一个字母。使用焦点是更好的选择

我注意到的另一件事是,所有给定的解决方案都会导致多次调用
.autocomplete()
。如果要向页面动态添加一个不会再次删除的元素,则只应触发一次事件。即使要删除并再次添加该项,每次删除或添加该元素时都应删除该事件,然后再重新添加该事件,这样就不会每次都不必要地重新关注该字段调用
.autocomplete()

我的最终代码如下:

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

要在动态加载jQuery>1.7中使用的
on()
事件时使自动完成工作,请使用Nathan Strutz在其注释中提供的语法:

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

其中,
.my field
是自动完成输入元素的选择器。

您可以将自动完成放在input live事件中,如下所示:

$(".foo:not(.ui-autocomplete-input)").live("focus", function (event) {
    $(this).autocomplete(options);
});
$('#输入元素').live('input',function(){
$(“#输入元素”)。自动完成(选项);

});我正在使用ui.autocomplete,您可以使用绑定:)。我可以触发警报。。。但这实际上并没有使它成为一个自动完成。。。如果我尝试在我的答案中更新的内容,我会得到语法错误…这对我来说没有任何意义。autocomplete尚未添加到新元素中,因此无法绑定到它生成的任何事件。下面是丹的正确答案。这个答案是乱七八糟的,这里是应该被接受的正确答案。这是正确的答案。keyup上的绑定似乎并不适用于第一次击键。非常聪明的想法。谢谢,谢谢。我发现“focus”比“keydown”更好。我将其调整为与日期选择器一起使用,并将其更新为使用更新的on()语法。这是我的代码(很抱歉缺少格式):
$(文档).on(“焦点”,“.dateField:not(.ui-datepicker-input)”,函数(事件){$(this.datepicker({dateFormat:“mm/dd/yy”});})@NathanStrutz你刚刚救了我!当您在Drupal7中对表单元素进行AJAX刷新时,您的代码是唯一仍然有效的东西!谢谢$(document).on(“focus”,“.foo:not(.ui autocomplete input)”,函数(event){$(this.autocomplete(options);});这是我找到的最好的、最酷的插件!我想这也适用于datepicker!我一直在搜索这个,因为我使用jquery。。。我只能投一次赞成票。。。。我的坏…非常推荐的插件,这将删除你的头像作为一个更新,
live()
是不推荐的,现在
on()
是用来做这件事的,比如:
$(document).on(“keyup.autocomplete”,'.autocomplete',function(){$(this.autocomplete({…});})
…是否有任何方法可以实现这种行为,而不必为添加的每个元素调用autocomplete方法,而只调用autocomplete方法一次?这是我见过的最好的答案,但仍然不是我想要的。我认为“on”方法的要点是,您绑定到最近的父级,而您知道该父级不会被替换,因此您只能绑定一次。这里是一次绑定到一个函数,该函数在每次添加新元素时绑定自动完成。这不是有点漏掉了吗?也就是说,每次添加新的输入元素时都会运行自动完成绑定,而不是只运行一次。关于()上的
,您是正确的,但自动完成不是一个事件。每次替换元素时,需要再次对该元素调用autocomplete函数。您可以实现它,以便调用autocomplete是替换元素的一部分,或者您可以设置一个事件侦听器,在聚焦时自动调用autocomplete