jquery.autocomplete.js - 自动完成是如何工作的?
我通过一个GET请求来调用自动补全的jQuery功能。
这个自动补全的调用方式是这样的:
$('#id_project_owner_externally').autocomplete('/pm/contact_autocomplete');
这个网址 /pm/contact_autocomplete 会返回一个元组列表。元组的第一部分是联系人的名字,第二部分是联系人的ID。
对应的函数(在Django视图中)是这样的:
def iter_results(results):
if results:
for r in results:
yield '%s|%s\n' % (r.first_name, r.id)
现在我在想,jQuery的自动补全是怎么处理这个名字和ID的元组的。实际上,名字会被放到输入框里。但是ID部分会发生什么呢?这个ID是我需要的重要信息。
我可以告诉jQuery把这个ID放到一个特定的隐藏字段里吗?
编辑:解决方案
<script type="text/javascript"><!--//
$('#id_project_manager_externally').autocomplete('/pm/contact_autocomplete').result(function(event, item) {$('#id_project_manager_externally_hidden').attr("value", item[1]);});//--></script>
2 个回答
2
你需要查看一下jquery.autocomplete.js的源代码。你的Python代码只是把每条记录的ID和名字用#号分开,每行一条。这个自动补全的JavaScript会处理这些输出,所以你需要修改的就是这部分代码,把ID放到你的隐藏字段里。
3
这个插件文档里有一个例子:
var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ];
$("...").autocomplete(data, {
formatItem: function(item) {
return item.text;
}
}).result(function(event, item) {
location.href = item.url;
});
简单来说,你可以使用一个叫 .result() 的选项来填充一个隐藏的字段。比如说,你可以用 $('#my_hidden_field').val(item.extra_value);
这段代码来设置这个隐藏字段的值。