Twitter bootstrap typeahead自定义按键ENTERfunction

我在我正在制作的Django网站上使用Twitter bootstrap。 我有一个页面,用户可以在配有bootstrap typeahead的文本输入中输入他们的所有技术技能。 我正在尝试访问下拉菜单中当前所选内的文本,这样当按下ENTER并在下拉列表中突出显示一个元素时,它将获取该值并将其显示在输入文本字段下方。 然后清除输入文本字段,用户可以搜索其他技能。

$(document).keyup(function(event) { if (event.keyCode == 13) { if ($('.dropdown-menu').css('display') != 'none'){ var newskill = $(".dropdown-menu > li.active").val(); alert('Yay'); } else{ var newskill = $("#enterbox").val(); alert('Boo'); } return false; } }); 

如果下拉列表可见,则输入按键function将获取下拉列表的当前活动元素并将其粘贴到文本框中(内置于Bootstrap中)。 没有警报框显示。 知道如何在发生这种情况之前让我的函数触发,即在Bootstrap的函数启动之前?

演示

我们可以利用Twitter的Typeahead发出的自定义事件 ,而不是收听按键(如果用户使用鼠标进行选择会怎么样?)。 也就是说,

  • typeahead:selected – 当显式选择下拉菜单中的建议时触发。

捕获选择

您可以使用jQuery的.on()方法监听它,并在第二个参数中向您提供有关用户选择的信息。

 $('input.typeahead').on('typeahead:selected', function(event, selection) { alert(selection.value); }); 

清除输入字段

从那里你可以随意selection.value 。值。 唯一的“问题”是尝试使用.val()清除输入。 由于Typeahead做了很多花哨的DOM重写,你也需要使用他们的’setQuery’方法。

 $('input.typeahead').typeahead('setQuery', ''); 

哟可以在你的输入代码上附加监听器,如下所示;

  $('#input').typeahead({ hint: true, highlight: true, minLength: 1 }, { name: 'some name', displayKey: 'value', source: data.ttAdapter(), }).on('keyup', this, function (event) { if (event.keyCode == 13) { $('#input').typeahead('close'); } }); 
 $(document).keyup(function(event) { if (event.keyCode == 13) { $('#yourtextbox').val(""); $('#yourtextbox').typeahead('close'); } }); 

你可以在这里找到typeahead的文档https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md