【问题标题】:jQuery autocomplete with multiple ajax'd values具有多个 ajax 值的 jQuery 自动完成
【发布时间】:2011-11-14 12:49:40
【问题描述】:

一直在关注 UI 站点上的文档,查看了许多教程并让我的代码能够正常工作,它在我想要的术语列表中的 ajax 中,您可以选择一个并放置值,然后 " , ".但是,之后它不会再次提示输入第二个值。

另外,当我输入一个部分并说弹出 10 个条目时,tabbing 只是转到下一个表单字段,不确定我的 .bind 有什么问题,也许是一个设置?如果有人不介意看一看,将不胜感激!

function split(val) {
            return val.split(/,\s*/);
        }

        function extractLast(term) {
            return split(term).pop();
        }

       jQuery('#tagSearch')
            .bind('keydown', function(event) {
                    if (event.keyCode === jQuery.ui.keyCode.TAB &&
                         jQuery(this).data('autocomplete').menu.active) {
                            event.preventDefault();
                    }
            })
           .autocomplete({
              autoFocus: true,
              source: function(request, add) {
                    console.log('source');
                    jQuery.getJSON('/get-tags-like.php?term_start=' + request.term, function(response) {
                        var possibleTerms = [];

                        jQuery.each(response, function(i, val) {
                            possibleTerms.push(val.name + ' ' + '(' + val.count + ')');
                        });

                        add(jQuery.map(possibleTerms, function(item) {
                            console.log(possibleTerms);
                            return item;
                        }));        
                    });
              },
              focus: function() {
                  console.log('focus');
                return false;
              },
              select: function(event, ui) {
                  console.log('select');
                  var terms = split(this.value);

                  terms.pop();

                  terms.push(ui.item.value);

                  terms.push('');

                  this.value = terms.join(',');

                  // At this point, example:
                  // Sony (5)
                var currentVal = this.value;

                  // Sony (5) - Gets inserted as "Sony"
                  currentVal = currentVal.replace(/\s\(.\)/, '');

                  this.value = currentVal;

                  return false;
              },
              minLength: 2
           });

【问题讨论】:

  • 自动完成对keydown事件的绑定会干扰你的吗?

标签: jquery ajax jquery-ui autocomplete jquery-ui-autocomplete


【解决方案1】:

但是,之后它不会再次提示输入第二个值。

确保您输入的字符数超过 2 个。传递给search 的函数正在阻止少于两个字符的搜索导致搜索:

search: function() {
      var term = extractLast(this.value);

      if (term.length < 2) {
          return false;
      }
},

另外,当我输入一个部分并说弹出 10 个条目时,跳格只是转到下一个表单字段,不确定我的 .bind 有什么问题,也许是一个设置?

开头的bind 试图阻止用户在突出显示自动完成候选时从字段中切换。使用单值自动完成,这通常不是问题,因为首先选择了菜单项,将其放置在 input 中,然后焦点丢失。

当您希望input 中有多个值时,这会发生变化。我们希望停止 keydown 的默认操作,该操作会将焦点更改到下一个输入字段。

autocomplete 有一个autoFocus 选项,在此处很有用。它将确保在用户键入后点击选项卡时始终选择候选人。

我无法完全复制您的情况,但我创建了一个演示,它没有显示您遇到的任何一个问题(我真正所做的只是更改源并添加 @987654331 @选项):http://jsfiddle.net/zTVKC/

【讨论】:

  • @John:很有趣……这可能是您正在寻找的东西吗?如果你搜索相同的东西两次(应该返回相同的结果),这有什么不同吗?
  • 您是否尝试过使用Firebug之类的工具来调试通过AJAX成功?
  • 您的服务器端代码是返回true,还是回调中发生的后处理结果?
  • 没问题,我也想弄清楚。我看到了您的编辑...您不需要致电.map()。此代码是否位于某个公共 URL 中?
  • 我确实修好了!通过在源函数的开头制作 request.term = extractLast(request.term) 。再次感谢所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多