【问题标题】:Twitter TypeAhead - MouseOver suggestions puts suggestion in input.tt-queryTwitter TypeAhead - MouseOver 建议将建议放在 input.tt-query 中
【发布时间】:2026-01-09 01:25:03
【问题描述】:

在标准 Twitter TypeAhead 中,我有以下行为:

当用户开始输入时,会弹出建议,当他按 Enter 键时,他会被重定向到详细搜索页面,并将他输入的文本用作 url 参数 ?query=[text]。这是预期的,好的。

当用户在点击回车之前将鼠标放在建议上时,它会自动将此建议的标题放在 tt-query-input 中(不可见),当点击回车时,搜索查询是建议的标题而不是他输入的内容。 如何避免这种行为?

我添加了此代码以在单击 Enter 时重定向(其中 txtQuery 是我添加到类 'typeahead tt-query:

   $('#txtQuery').bind("enterKey", function (e) {
         var url = '/?query=' + $('#txtQuery').val();
         window.location.href = url;
     });
     $('#txtQuery').keyup(function (e) {
         if (e.keyCode == 13) {
             $(this).trigger("enterKey");
         }
     });

【问题讨论】:

  • 我不确定这是否是“标准 tt”行为。你试过什么?代码?
  • 我添加了在点击输入时重定向的代码。其余的都是标准 tt 版本 0.9.3
  • 在预先输入中,按下回车键应该选择光标下的值并触发 enterKey 事件。从可用性的角度来看,这对我来说似乎是正常的行为 - 我看到提供的内容并按 Enter 让输入框保留光标下的内容。我想知道你的理由是为什么要改变它。
  • 这正是我想要避免的。当鼠标位于(或曾经)建议上方时按 Enter 不应将该建议的标题放在输入中。这些建议是指向页面的链接,点击它们会将用户引导到那里。当这些建议不是用户正在寻找的内容时,输入应该会引导他进入一个更详细的页面,其中包含他输入的搜索查询。

标签: jquery twitter-typeahead


【解决方案1】:

显然,当您将鼠标悬停在建议上时,会发生一些意想不到的事情。无论出于何种原因,悬停都会改变您在输入 DOM 中的值。您可以尝试阻止对事件执行的操作,如下所示:

$('.twitter-typeahead').on('mouseover', '.tt-suggestion', function(event){
  event.preventDefault();
  // verify input
  console.log($('#txtQuery').val());
});

编辑:

以同样的方式,您可以从“.tt-suggestion”项目中“取消绑定”keydown 事件,以防止enter 选择和提交。

HTH

【讨论】:

  • 我无法真正避免 tt 设置 - 一旦鼠标悬停在建议上 - 在 input.tt-query 之后添加的 span-element 中的建议。使用您的鼠标悬停事件,我将用户查询置于隐藏输入中,并在重定向时使用此输入。不是很优雅,但目前它有效..