jQuery自动完成:如何刷新列表?

jQuery自动完成:如何刷新列表?,jquery,binding,jquery-autocomplete,Jquery,Binding,Jquery Autocomplete,我有一个表单,其中包含数量可变的自动完成字段,这些字段使用相同的选择列表。根据需要添加和删除这些字段。每当页面上的某个参数发生更改时,我都会尝试更新所有字段的列表,方法是首先调用unbind,然后使用添加到url的新参数自动完成 $('input.foo').unbind().autocomplete(url?new_param=bar); 问题是,解除绑定似乎并不意味着解除绑定。当我在输入字段中键入时,它会触发自动完成事件的整个历史记录 我还尝试了flushCache,但没有成功 我如何清除

我有一个表单,其中包含数量可变的自动完成字段,这些字段使用相同的选择列表。根据需要添加和删除这些字段。每当页面上的某个参数发生更改时,我都会尝试更新所有字段的列表,方法是首先调用unbind,然后使用添加到url的新参数自动完成

$('input.foo').unbind().autocomplete(url?new_param=bar);
问题是,解除绑定似乎并不意味着解除绑定。当我在输入字段中键入时,它会触发自动完成事件的整个历史记录

我还尝试了flushCache,但没有成功

我如何清除旧事件


谢谢。

自动完成插件添加了一个名为unautocomplete的函数,用于从包含自动完成的字段中删除自动完成,因此如果将代码更改为:

$('input.foo').unautocomplete().autocomplete('url?new_param=bar');
此UnauthoComplete函数应删除所有旧事件。

请尝试此操作

$ ('input.foo').unbind('.autocomplete').autocomplete ('url?new_param=bar') ;

我认为您的问题在于没有一个表单包含自动完成输入字段。如果查看jquery.autocomplete.js的代码,它会执行$input.form.unbind.autocomplete;在UnauthoComplete上,这意味着输入必须位于表单标记内才能工作。

jQuery提供flushCache方法,通过自动完成删除已匹配的内容


例如,如果所使用的html元素是,并且自动完成与之关联。flushCache可以如下所示:$txtElement.flushCache;这将解决问题。

如果您使用的是选项,请添加cacheLength并将其设置为1。此设置不会存储任何返回的记录。相信我,它让我的生活变得更好。。。整整5分钟。

嘿,谢谢你的回复。我试图不完成,但没有成功。不过,我确实使用了removeData“事件”,这很有效input.foo'.removeData'events'.autocomplete'url?new_param=bar';请注意,如果您这样做,附加到该元素的任何其他事件都会被吹走。@cinematic是的,查看自动完成插件代码,不幸的是,它们命名为“keydown”事件,而不是作为自动完成的一部分添加到输入中的单击、焦点或其他事件。如果他们费心去坚持到底,那只是去做的问题。取消绑定“keypress.autocomplete”。取消绑定“click.autocomplete”。等等。虽然我想这些都应该是未完成的。很好。。。感谢您提供的解决方案。此解决方案会在IE中的down键重新加载时跳过项目。我会使用工作解决方案正确回答,因为它似乎@cinematic让它工作了。请在上面的声明中明确:此设置不会存储任何以前返回的记录。很抱歉它将执行新的记录检索。$input.form不会运行。$'“input.form”将选择带有类表单的输入标记,如。我认为您正在考虑的是$'form input',它将是表单标记中的输入标记。在任何情况下,您上面提到的代码都不在jquery.autocomplete.js中-这个答案不适用。太糟糕了,它在列表中的位置太低了。你的小费很管用。投票赞成。flushCache方法在不清除设置的情况下处理数据。此答案是当前的处理方法。它不适用于动态添加的DOM元素。这个答案有效:还有$target.autocompletedisable;请参阅API如何在销毁前检查自动完成是否处于活动状态?
$(target).autocomplete("destroy");