JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?

Posted

技术标签:

【中文标题】JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?【英文标题】:What does formatResult and formatItem options do in JQuery Autocomplete?JQuery 自动完成中的 formatResult 和 formatItem 选项有什么作用? 【发布时间】:2010-10-18 18:10:18 【问题描述】:

这里有点迷糊,JQuery Autocomplete插件中的formatResult和formatItem是做什么的?

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

例如,返回的结果如下所示,这是自动完成显示的内容:- ["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 请求。

加特

【问题讨论】:

如有必要,请随时要求澄清我的答案。如果它解决了你的问题,请给我答案。 ;o) 【参考方案1】:

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

默认情况下,自动完成期望从指定的 url 获取数据,格式为:

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

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

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

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

以下是使用非标准自动完成数据 (JSON) 进行自动完成的示例:

<script type="text/javascript"> 
  format_item = function (item, position, length) 
    return item.title; 
   

 // Handle data from ajax request 
 prep_data = function(data) 
   tmp = $.evalJSON(data); 
   parsed_data = []; 
   for (i=0; i < tmp.length; i++)  
     obj = tmp[i]; 
     // Other internal autocomplete operations expect 
     // the data to be split into associative arrays of this sort 
     parsed_data[i] =  
        data: obj , 
        value: obj.isbn13, 
        result: obj.title 
     ; 
    
   return parsed_data 
  

 $(document).ready(function() 
   $("#fop").autocomplete( 
          url : "% url book-search %", 
          // undocumented 
          parse: prep_data, 
          formatItem: format_item, 
          ); 
 ) 

</script>

【讨论】:

感谢您的帖子,非常有帮助! 我认为如果您更改“foo|bar|baz”示例数据以反映 JSON 部分中的图书搜索示例会更清楚。 我认为您应该更清楚地强调您的答案包含 2 种不同的方法(将其分成 2 个答案?) 也许您可以将“这是使用非标准自动完成数据 (JSON) 进行自动完成的示例”更改为简单的“这是使用 (JSON) 进行自动完成的示例” 我认为如果“未记录的”注释从行上方移动到该行的右侧,或者它读到类似(“将未记录的解析函数实现替换为可以解析 JSON 数据")【参考方案2】:

到目前为止,我还无法让 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

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

【讨论】:

以上是关于JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 中的自动完成功能只是...停止工作?

选择后清除 Jquery 自动完成中的文本框

Rails:搜索表单中的jquery自动完成

输入文本框背景中的jQuery自动完成

JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?

jquery ui自动完成仅显示数据库中的第一项