jQuery自动完成:确定输入的文本是否不匹配

我已经启动了jQuery Autocomplete(UI 1.6rc2)并且正常运行,当用户选择一个项目时,它会使用相关ID更新隐藏的表单值。 当输入的文本与自动完成列表中的结果不匹配时,如何将隐藏的表单值设置为“0”? 在这种情况下,我将创建一个新条目。

我在自动完成function中这样做了:

change: function(event, ui){ $(this).next("input[id^=person_id]").val(''); return false; 

在用户选择该选项并使用项目ID填充我的隐藏输入后,如果可见输入发生任何更改,则清除隐藏的输入值。 奇迹般有效!

您还可以在自动填充中使用“搜索”选项。

 search: function(event, ui){ $(this).next("input[id^=person_id]").val(''); } 

似乎工作。 它会在延迟和最小长度之后触发,但如果你将它设置为minlength = 0,它确实很清楚。

我遇到了同样的问题……看起来当值不匹配时没有事件上升……但是,似乎找到了一些解决方法……

由Xavier在这个post的回复中:

 selected: function() { if(listItems.filter(”.” + CLASSES.ACTIVE)[0]){ return data && data[ listItems.filter("." + CLASSES.ACTIVE)[0].index ]; } else { if (options.notFound){ options.notFound(); } } } 

那不是我认为最好的解决方案……还有其他想法吗? 是的,我没有解决如何使用这个特定的解决方案:(

哦,我想我找到了一个技巧如何超越所有这些事件…简单地说,将此添加到extraParams以及发送到自动完成的其他参数

 extraParams: { x: function(){ $("#targetField").val(''); } } 

这个只是在发送请求时清空字段,如果没有找到结果或者没有选择任何内容并且输入了一些新的自定义值,它就会保持为空…

根据这里的评论主题,似乎不可能。 我想我只是检查输入的值对数据库,如果它不存在,创建一个新的。

 $("#txtSearchProvider").autocomplete("../WebServices/PageMethods/AutoComplete.aspx", { minChars: 3, formatItem: function(data, i, n, value) { return value.split("-z-")[0]; }, formatResult: function(data, value) { return value.split("-z-")[0]; } } ); $("#txtSearchProvider").result(function(event, data, formatted) { $("#txtSearchProviderHidden").val(data[0].split("-z-")[1]); }); 

回复:../ WebServices / PageMethods / AutoComplete.aspx

数据1,Corp-z-29310数据2,Almazan&Barbara,LLP-z-35745 Dos Santos Santos-z-36327 Calzano&Salzano-z-39295