阻止关闭select的typeahead.js下拉列表

时间:2013-11-24 22:41:13

标签: javascript javascript-events autocomplete typeahead typeahead.js

如何在选择项目时阻止预先关闭下拉菜单?我尝试过像这样使用preventDefault:

$('#q').bind('typeahead:selected',function(obj, datum, name) {  
            ...
            obj.preventDefault();
        });

但没有成功。

编辑: 我已经设法通过使用typeahead_views.js注释的第217-218行构建Typeahead来“修复”这个问题:

  byClick && utils.isMsie() ?
       utils.defer(this.dropdownView.close) : this.dropdownView.close();

但是如果不修改源文件,还有另一种方法吗?

4 个答案:

答案 0 :(得分:0)

触发闭合回调上输入的焦点。

    $('#typeahead-input').on('typeahead:closed', function(e, d) {
      $('#typeahead-input').focus();
    });

答案 1 :(得分:0)

我正在使用令牌字段内的预先输入,所以第一部分是我访问Typeahead.dropdown对象,该对象本身需要一些搜索。

尝试使用isOpen或覆盖close函数,最终得到的最接近的是这个。打破事件的编组。您必须重新实现任何值的保存等,基本上是Typeahead.select的前3行。

我自己被阻止了能够在下拉列表中放置一个表单(焦点停留在输入字段中),并且如果要在那里放置一些交互式内容,还会更多地搜索。想想我会在这个问题上寻求自己的解决方案,但可能会帮助那些只想阻止关闭的人,将原来的功能放在var中,以便在你完成时将其重新安装到位

$('input[id="test"]').data('bs.tokenfield')
    .$input.data('ttTypeahead').dropdown.trigger = function(e) {};

这也有潜力:

$('input[id="test"]').data('bs.tokenfield')
    .$input.data('ttTypeahead').eventBus.trigger = function(e) {};

答案 2 :(得分:0)

更简单的方法:

     input.data('tt-typeahead')._selectOld = input.data('tt-typeahead')._select
     input.data('tt-typeahead')._select = function(datum) {
       if (false)
         this._selectOld(datum)
     }

答案 3 :(得分:0)

有同样的问题和(非常简单的)解决方案似乎没有记录在任何地方

$(document).on('typeahead:beforeclose', function(event, data) {
  event.preventDefault()
})

(这只是防止下拉关闭,在开发过程中非常有用,如果你想阻止仅在selet上关闭,请使用'typeahead:beforeselect'。)