在这里有一点困惑,formatResult和formatItem在
JQuery Autocomplete插件中做了什么?
我有一个函数返回一个逗号分隔的字符串(从Django),但我的自动完成功能无法将字符串拆分成单独的条目/行,我如何使用自动完成功能实现这一点?
例如,返回的结果如下所示,这是自动填充显示的:
[“一”,“一二”,“一人”,“另一人”]
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格式化项目以在输入框中进行选择.
foo|bar|baz|bing zaz|ding|blop|grok
其中每一行都是一行数据;每行都是传递给formatItem和formatResult的数据.您可能希望采取最小阻力的路径,并以其喜欢的方式返回数据.
如果要使用不符合自动完成假设的数据,则需要使用(无证据的,尽可能分辨)解析选项来识别用于解析您的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>