如果用户输入文本而不选择一组自动完成建议,我们需要能够调用处理程序.
在我们的例子中,输入的文本是否与任何自动完成值匹配并不重要 – 我们只关心用户是否单击/选择自动完成值.
我们的表单的工作方式是用户开始输入联系人的姓氏,并获得自动填充建议,包括联系人的全名和公司.如果用户选择其中一个自动填充建议,我们会填充多个字段.这一切都很好.
新的要求是,如果用户没有选择其中一个建议,我们需要删除多个字段 – 我们希望使用从自动完成库调用的处理程序来实现这些字段.
看看previous answers,看起来我们不能用Jörn Zaefferer’s autocomplete plugin做到这一点,但是如果你有一个补丁或一些想法如何实现这个功能,这就是我们试图将其推入的库.
解决方法
我遇到了非常有趣的答案.它涉及jQuery插件如何管理其状态.当我看着firebug(带有firequery)时,我发现当我点击显示DOM节点的jQuery属性的图标时(在HTML选项卡中),它显示了附加到DOM节点的所有插件数据,并附加到整个自动完成参数.因此我找到了解决方案.
$('#test').autocomplete({ change:function( event,ui ) { var data=$.data(this);//Get plugin data for 'this' if(data.autocomplete.selectedItem==undefined) alert("manual"); else alert("selected"); } });
自动完成的作用是,如果我们从列表中选择,则selectedItem包含我们刚刚选择的JSON对象及其所有属性.但是如果我们按ESC或取消自动填充,它将被设置为null.