Twitter bootstrap typeahead自定义按键ENTER功能

Col*_*ell 11 javascript django jquery twitter-bootstrap

我在我正在制作的Django网站上使用Twitter引导程序.我有一个页面,用户可以在配有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;
    }
  });
Run Code Online (Sandbox Code Playgroud)

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

Sin*_*eta 24

演示

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

  • typeahead:selected - 明确选择下拉菜单中的建议时触发.

捕获选择

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

$('input.typeahead').on('typeahead:selected', function(event, selection) {
  alert(selection.value);
});
Run Code Online (Sandbox Code Playgroud)

清除输入字段

从那里你可以随心所欲地做selection.value.唯一的"问题"是试图清除输入.val().由于Typeahead做了很多花哨的DOM重写,你也需要使用他们的'setQuery'方法.

$('input.typeahead').typeahead('setQuery', '');
Run Code Online (Sandbox Code Playgroud)


Jep*_*epp 10

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

 $('#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');
        }
    });
Run Code Online (Sandbox Code Playgroud)