添加到元素后如何删除自动完成功能?
Posted
技术标签:
【中文标题】添加到元素后如何删除自动完成功能?【英文标题】:How to remove an autocomplete once added to an element? 【发布时间】:2011-03-07 08:19:04 【问题描述】:在我向以下元素添加自动完成功能后:
commObj=$("#communityName").autocomplete("auto_commName_backend.php",
'onItemSelect': handleItemSelect, 'extraParams': 'ndo' + ndo);
有没有办法可以禁用它或动态删除元素的自动完成功能?
我正在使用 Dylan Verheul 的修改后的 jquery 自动完成插件。 http://www.pengoworks.com/workshop/jquery/autocomplete_docs.txt
【问题讨论】:
【参考方案1】:该插件非常紧密地连接到<input>
。如果它是我的页面,我想我只有 两个 标签具有相同的“名称”,一个带有自动完成功能,一个没有。当我想在它们之间切换时,我会禁用并隐藏其中一个,并启用/显示另一个。 (编辑哦,还要确保字段的值在切换时来回复制)
【讨论】:
【参考方案2】:如果您向元素添加一个类,例如“EnableAC”,您可以将该类作为自动完成的目标。当您完成自动完成并想要禁用它时,您将删除该类。
您为什么要禁用该功能?如果您的用户想要更改他们的选择并且自动完成不会触发,这可能会使您的用户感到困惑。
【讨论】:
我不确定这会起作用,因为一旦插件绑定到<input>
,就会保留几个事件处理程序。【参考方案3】:
我刚刚简单浏览了插件的 js 文件。
在 jquery.autocomplete.js 插件的初始化过程中似乎有一条 javascript 行(编号 21)将原始源输入设置为:
input.autocompleter = me;
如果不进行测试,也许您可以简单地调用以下命令来删除插件和原始输入之间的链接?
$('#<your input id>').autocompleter = null;
【讨论】:
这可能可以工作,但脚本还绑定了一堆事件处理程序。 是的,就像我说的那样,我没有太多机会研究它,因为我很着急,但这可能是 P Coder 研究的一个很好的起点。我可以看到插件脚本中没有本机销毁功能。【参考方案4】:您可以使用以下代码行删除自动完成行为:
if (jQuery(control).data('autocomplete'))
jQuery(control).autocomplete("destroy");
jQuery(control).removeData('autocomplete');
【讨论】:
我认为不需要关于 removeData 的那一行。我测试了,在做了 $(control).autocomplete('destroy') 然后 $(control).data('autocomplete') 返回 undefined 在我使用的 jQuery UI 版本 (1.11) 中,.data() 总是返回未定义的。省略条件并在对 autocomplete("destroy") 的调用周围加上 try/catch 会更安全。【参考方案5】:我刚试过 $('#').autocomplete = null; 它有效。 我允许更改苍蝇的名称,结果不会显示,现在可以了。 旧的未更改名称会在现在之前显示新名称
【讨论】:
【参考方案6】:我发现的最简单和最安全的方法是:
$(control).autocomplete(source: []);
或者,如前所述,这也可以:
$(control).autocomplete("destroy");
如果您确定您的控件设置了自动完成处理程序。
【讨论】:
这里的第一个选项对我来说是完美的。我动态生成“促销代码”,在选择一个之后,我想删除选择其他任何内容的能力,除非删除了添加的促销,所以: $('#tags_promo').autocomplete('option', 'source ', []);添加促销和 $('#tags_promo').autocomplete('option', 'source', availablePromo);在删除。非常感谢,我尝试做各种复杂的事情,而不是这个! 正是我需要的【参考方案7】:在最新版本的 jQuery UI(1.12) 中,即使存在自动完成数据,$(control).data('autocomplete')
也不会返回 true。
相反,检查 ui-autocomplete-input
类的存在返回 true。
我相信以下就足够了。
if ($(control).hasClass('ui-autocomplete-input'))
$(control).autocomplete("destroy");
【讨论】:
【参考方案8】:禁用按元素 ID 自动完成:
$("#elementId").autocomplete(
disabled: true
);
【讨论】:
以上是关于添加到元素后如何删除自动完成功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何将自动完成添加到动态添加的输入字段?自动完成功能不适用于动态添加的输入字段