2010-01-10 63 views
2

我使用GET请求的结果调用了自动完成jQuery。 自动完成功能调用看起来是这样的:jquery.autocomplete.js - 自动完成如何工作?

$('#id_project_owner_externally').autocomplete('/pm/contact_autocomplete'); 

的URL/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的自动完成与FIRST_NAME + ID元组做。将first_name放入输入字段。但是id部分发生了什么。这是我需要的重要信息。

我可以告诉jQuery的id应该放在一个隐藏的领域?

link to js source

编辑:该解决方案

<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> 

回答

3

plugin docs有这样的例子:

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; 
}); 

所以你基本上可以有一个用于填充的隐藏字段。结果()选项。 例如$('#my_hidden_field').val(item.extra_value);

+0

这看起来很有前途。我会试一试。 – 2010-01-10 19:24:19

+0

这是正确的答案。使用.result()选项,您可以替换隐藏字段的值。用户从自动填充下拉列表中选择了一个选项后,结果部分就会被触发。 – 2010-01-10 21:09:33

2

你需要寻找到jquery.autocomplete.js源代码,你的Python代码所做的就是简单地返回由哈希分离的ID和名称char,每行一个记录。自动完成JavaScript处理输出,因此这是您需要修改以将ID放入隐藏字段的代码的一部分。

+0

入侵自动完成js并不是我最喜欢的方式。嗯..似乎比预期更复杂。 – 2010-01-10 18:59:14