jquery.autocomplete.js - 自动完成是如何工作的?

2 投票
2 回答
2749 浏览
提问于 2025-04-15 17:51

我通过一个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放到一个特定的隐藏字段里吗?

这是jQuery源代码的链接

编辑:解决方案

<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); 这段代码来设置这个隐藏字段的值。

撰写回答