formatResult和formatItem选项在JQuery自动完成中的作用是什么?

这里有点困惑,formatResult和formatItem在JQuery Autocomplete插件中做了什么?

我有一个函数返回逗号分隔的字符串(来自Django),但我的自动完成function无法将字符串拆分为单独的条目/行,我如何使用自动完成function实现此目的?

例如,返回的结果如下所示,这就是自动完成显示的内容: – [“one”,“oneTwo”,“Onethree”,“anotherOne”]

我希望在自动填充字段中显示时将其拆分为: –

one oneTwo Onethree anotherOne 

我有一种感觉,我可以使用formatResult和formatItem,但我不知道怎么样,没有好的例子!

我在html模板中的代码:

  function autoFill(){ $("#tags").autocomplete("/taglookup/", { width: 320, max: 4, highlight: false, multiple: true, multipleSeparator: " ", scroll: true, scrollHeight: 300 }); } 

我使用Dajango来处理GET请求。

迦特

formatItem格式化在下拉列表中显示的项目,而formatResult格式化项目,以便在选择后在输入框中显示。

默认情况下,自动填充期望从指定的URL获取数据格式为:

 foo|bar|baz|bing zaz|ding|blop|grok 

每行是一行数据; 每一行都是它传递给formatItemformatResult 。 您可能希望采用阻力最小的路径并以其喜欢的方式返回数据。

如果要使用不符合自动完成假设的数据,则需要使用(未记录的,据我所知)解析选项来标识解析ajax请求结果的函数。 在我看来,你的django视图返回一个数组而不是返回一个格式化的字符串。 要像jquery那样格式化数组:

 return HttpResponse('|'.join(your_array), mimetype='text/plain') 

以下是使用非标准自动填充数据(JSON)执行自动填充的示例:

  

到目前为止,我无法使formatMatch和formatResult工作。 我仍然在使用’正确’的方式来使用它们。 但是,作为一种解决方法,您可以使用parse选项,如下所示。 为了清楚起见,在此示例中,formatItem和parse是有效的,而formatResult和formatMatch不起作用。

 jQuery(function(){ $('#profile-tabs_addresses_grid_b_a_PostalCode').autocomplete ('http://test.mydomain.com/locality/postalcodes/', { minChars:1, delay:400, cacheLength:100, matchContains:true, max:10, formatItem:function(item, index, total, query){ return item.PostalCode + ': ' + item.Region + ', ' + item.City + ', ' + item.Country; }, formatMatch:function(item){ return item.PostalCode; }, formatResult:function(item){ return item.PostalCode; }, dataType:'json', parse:function(data) { return $.map(data, function(item) { return { data: item, value: item.PostalCode, result: item.PostalCode } }); }}); }); 

这里是从数据URL返回的json数据(添加了空白以便于查看):

 [ {City:"St. Louis", Country:"USA", PostalCode:"63103", ID:3, Region:"Missouri"}, {City:"St. Louis", Country:"USA", PostalCode:"63109", ID:1, Region:"Missouri"}, {City:"St. Louis", Country:"USA", PostalCode:"63119", ID:2, Region:"Missouri"} ] 

当我在邮政编码框中输入6时,它会显示所有三个选项,格式正确:

 63103: Missouri, St. Louis, USA 63109: Missouri, St. Louis, USA 63119: Missouri, St. Louis, USA 

当我选择一个时,文本框只会收到选定的邮政编码。