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

gat*_*ath 10 javascript django jquery

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

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

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

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

one
oneTwo
Onethree
anotherOne
Run Code Online (Sandbox Code Playgroud)

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

我的代码在html模板中:

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

我使用Dajango来处理GET请求.

迦特

vez*_*ult 19

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

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

foo|bar|baz|bing
zaz|ding|blop|grok
Run Code Online (Sandbox Code Playgroud)

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

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

return HttpResponse('|'.join(your_array), mimetype='text/plain')
Run Code Online (Sandbox Code Playgroud)

以下是使用非标准自动填充数据(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>
Run Code Online (Sandbox Code Playgroud)