【问题标题】:Is there a way to close the dropdown menu for typeahead.js?有没有办法关闭 typeahead.js 的下拉菜单?
【发布时间】:2013-08-14 21:44:58
【问题描述】:

我使用typeahead.js 进行预输入。

我基本上想做相反的事情:Programmatically triggering typeahead.js result display

我尝试在预输入上设置.trigger('blur');,但我通过.typeahead('setQuery', value); 在此之前设置了值。执行 'setQuery' 会触发一个 ajax 请求以使用新的查询词获取结果。所以“模糊”发生了,但盒子很快就打开了。

【问题讨论】:

  • 所以你想让下拉菜单在你setQuery之后隐藏?仅供参考,这可能需要对插件本身进行一些更改。
  • 正确,我知道:/

标签: javascript jquery typeahead typeahead.js


【解决方案1】:

从 0.11 版开始的正确方法:

$('.typeahead').typeahead('close');

手册:https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md#jquerytypeaheadclose

【讨论】:

  • 为什么对我来说它需要一些鼠标移动才能关闭!?
  • 我收到了这条消息!未捕获的 TypeError:s[n] 不是函数
  • 在我的特定测试 (typeahead.js@0.11.1) 中,库将 div/span 控件类修改为 twitter-typeahead 因此,如果它不起作用,您可以尝试 $('.twitter-typeahead').typeahead('close');
【解决方案2】:

参考:https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md

$('.typeahead-input').typeahead('close');

未记录,但有办法设置前提条件,不允许打开下拉菜单:

$('.typeahead-input').on('typeahead:beforeopen', function() {
    return false;
});

【讨论】:

    【解决方案3】:

    如果将来有人遇到这种情况,现在最好的方法是:

    $('.tt-dropdown-menu').css('display', 'none')
    

    如果您打开 Chrome 开发者工具并观察在您键入和擦除时会发生什么,这就是 Typeahead 所做的一切,没什么神奇的。

    此外,如果您尝试使用当前版本 (10.5) 设置查询,您将收到如下所示的错误:

    Uncaught TypeError: Cannot assign to read only property 'highlight' of
    

    【讨论】:

    • 好吧,我没有投反对票,但我想人们可能喜欢坚持使用 api 的解决方案。那就是说api对我不起作用(调用typeahead('close'),所以我想我会颠覆api。另外,如果有人使用typeahead 0.11,.tt-dropdown-menu似乎只是tt-menu。
    • 是的,在 v.0.11 中,您将需要 $('.tt-menu').css('display', 'none');
    【解决方案4】:

    在我的特殊情况下,typeahead API (typeahead.js@0.11.1) 的专用关闭方法不起作用。可能是因为自定义 CSS 或我的代码中的一些错误。

    虽然other answer 中描述的通过将 display 属性设置为 none 来隐藏菜单的方法有效,但我需要将其设置回 display:block 以将其显示回来以供后续使用。另外它没有使用 API。

    对我来说另一种更好的方法是清除输入的值,以便隐藏下拉菜单:

    $('.typeahead').typeahead('val', '');
    

    或

    $('#place_typeahead_control').typeahead('val', ''); 以防您在页面上有多个搜索控件并且您想定位特定的一个。

    【讨论】:

      【解决方案5】:

      您可以在“打开”事件处理程序中触发“模糊”。如果下拉菜单闪烁片刻,您可以使用 CSS 暂时隐藏它。

      【讨论】:

      • 建议框弹出时实际上并没有调用“opened”事件处理程序。当光标在输入中时,“opened”事件被调用。
      【解决方案6】:

      不要调用 setQuery,而是添加另一个不执行 getSuggestions 的函数,你会玩得很开心。

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 2021-05-11
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        相关资源
        最近更新 更多