我已经启动并运行良好的 jQuery Autocomplete (UI 1.6rc2),当用户选择一个项目时,它会使用关联的 ID 更新隐藏的表单值。当输入的文本与自动完成列表中的结果不匹配时,如何将隐藏表单值设置为“0”?在这种情况下,我将创建一个新条目。
6 回答
我在自动完成功能中做到了这一点:
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 之后触发,但如果您将其设置为 minlength=0,它确实会很好地清除。
我遇到了同样的问题...看起来当值不匹配时没有发生事件...但是,似乎找到了一些解决方法...
来自此线程的回复的 Xavier :
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