有没有一种方法可以关闭typeahead.js的下拉菜单?

8
我正在使用typeahead.js实现自动补全。基本上,我想做的是与此相反:编程触发typeahead.js结果显示。我尝试在typeahead上执行.trigger('blur');,但在那之前,我通过.typeahead('setQuery', value);设置了值。这会触发一个ajax请求以获取新查询术语的结果。所以"blur"事件发生了,但很快框就打开了。

所以你希望在设置setQuery后隐藏下拉菜单?需要注意的是,这可能需要对插件本身进行一些更改。 - Dan-Nolan
正确的,我知道 :/ - nwalke
6个回答

17

为什么对我来说需要移动一些鼠标才能关闭? - DaNeSh
1
我收到了这个消息!未捕获的类型错误:s[n]不是一个函数。 - DaNeSh
在我的特定测试中(typeahead.js@0.11.1),div/span控件类被库修改为twitter-typeahead,因此,如果它不起作用,您可以尝试$('.twitter-typeahead').typeahead('close'); - Alex P.

1

0
如果有人未来遇到这个问题,现在最好的解决方法是:
$('.tt-dropdown-menu').css('display', 'none')

如果您打开 Chrome 开发者工具,并观察您输入和删除时发生的情况,这就是 Typeahead 所做的一切,没有任何魔法。
此外,如果您尝试在当前版本(10.5)中设置查询,您将收到以下错误:
Uncaught TypeError: Cannot assign to read only property 'highlight' of

1
我没有投反对票,但我想人们可能喜欢坚持使用API的解决方案。话虽如此,API对我来说并不起作用(调用typeahead('close')),所以我猜我将会绕过API。另外,如果有人正在使用typeahead 0.11,那么.tt-dropdown-menu似乎只是tt-menu。 - user254694
是的,在v.0.11中,您需要使用$('.tt-menu').css('display', 'none'); - Alex P.

0
在我的特定情况下,typeahead API (typeahead.js@0.11.1) 的专用关闭方法没有起作用。可能是因为自定义 CSS 或我的代码中的某些 bug。
虽然通过将显示属性设置为 none 来隐藏菜单的 其他答案 中描述的方法可行,但我需要将其设置回 display:block 以便在后续使用中再次显示它。此外,这种方法并不使用 API。
对我来说,另一种更好的方法是清除输入框的值,这样下拉菜单就会被隐藏:
$('.typeahead').typeahead('val', '');

或者

$('#place_typeahead_control').typeahead('val', ''); 如果您在页面上有多个搜索控件并且想要针对特定的一个进行操作。


-1

您可以在“已打开”事件处理程序中触发“模糊”操作。如果下拉菜单闪烁一会儿,您可以使用CSS将其隐藏。


当建议框弹出时,“opened”事件处理程序实际上不会被调用。只有在光标位于输入框中时,“opened”事件才会被调用。 - nwalke

-3

不要调用setQuery,添加另一个不执行getSuggestions的函数,你会有一个愉快的时光。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接