这里有点困惑,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请求。

盖特

最佳答案

formatItem格式化要在下拉列表中显示的项目,而formatResult格式化要在输入框中显示的项目,一旦选中它。

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

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

每行是一行数据;每行都是传递给formatItemformatResult的数据。您可能想采用阻力最小的路径,并按自己喜欢的方式返回数据。

如果要使用不符合自动完成假设的数据,则需要使用(据我所知,未记录)parse选项来标识用于解析ajax请求结果的函数。在我看来,您的django View 正在返回一个数组,而不是返回一个格式化的字符串。要将数组格式化为jqu​​ery,请按以下步骤操作:
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>

关于javascript - JQuery Autocomplete中的formatResult和formatItem选项有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/737453/

10-12 16:16