javascript – TypeAhead.js和Bloodhound显示奇数个结果

前端之家收集整理的这篇文章主要介绍了javascript – TypeAhead.js和Bloodhound显示奇数个结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的前端有一个TypeAhead / Bloodhound实现,它从Play / Scala服务器中获取 JSON数据. Typeahead版本是0.11.1.实施情况如下:

HTML:

  1. <div id="typeahead" class="col-md-8">
  2. <input class="typeahead form-control" type="text" placeholder="Select the user">
  3. </div>

JavaScript的:

  1. var engine = new Bloodhound({
  2. datumTokenizer: function (datum) {
  3. var fullName = fullName(datum);
  4. return Bloodhound.tokenizers.whitespace(fullName);
  5. },queryTokenizer: Bloodhound.tokenizers.whitespace,identify: function(obj) { return obj.id; },remote: {
  6. url: routes.controllers.Users.index("").url,cache: false,replace: function (url,query) {
  7. if (!isEmpty(query)) {
  8. url += encodeURIComponent(query);
  9. }
  10. return url;
  11. },filter: function (data) {
  12. console.log(data);
  13. return $.map(data,function (user) {
  14. return {
  15. id: user.id,fullName: viewmodel.fullName(user)
  16. };
  17. });
  18. }
  19. }
  20. });
  21.  
  22. // instantiate the typeahead UI
  23. $('#typeahead .typeahead')
  24. .typeahead({
  25. hint: true,highlight: true,minLength: 1,},{
  26. name: 'engine',displayKey: 'fullName',source: engine
  27. })
  28.  
  29. function fullName(data) {
  30. if (data === undefined) return "";
  31. else {
  32. var fName = data.firstName === undefined ? "" : data.firstName;
  33. var lName = data.lastName === undefined ? "" : data.lastName;
  34. return fName + ' ' + lName;
  35. }
  36. };

服务器的JSON响应给出:

  1. [{"firstName":"Test","lastName":"User","id":1},... ]

服务器将页面结果,以便最多可以获得5个结果,这也是Typeahead / Bloodhound的默认限制.

问题是当服务器返回5个结果时,Typeahead在叠加中显示0个结果.如果服务器提供4个结果,则TypeAhead会在叠加层中显示1.如果服务器提供3个结果,TypeAhead显示2个结果.对于2和1结果,它显示了覆盖图中正确的元素数量.如果我删除页面长度,并且服务器返回超过10个结果,则TypeAhead显示5个结果(限制).过滤器中的console.log显示正确的数据结果数量,所以他们至少要去Bloodhound.

这段代码可能是什么问题?此TypeAhead字段是此页面中唯一的TypeAhead-field.我检查了DOM,而TypeAhead会产生错误的结果集字段,所以这不是CSS的问题(也尝试删除所有自定义CSS).

感谢任何回复:)

解决方法

代码中的头文字有一个问题:

https://github.com/twitter/typeahead.js/issues/1218

您可以按照问题页面上所述在JS中自行更改代码.

猜你在找的JavaScript相关文章