阻止typeahead.js下拉列表在选择时关闭

Prevent typeahead.js dropdown from closing on select

本文关键字:选择 typeahead js 下拉列表 阻止      更新时间:2023-09-28

选择项目时,如何防止typeahead下拉列表关闭?我试过这样使用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();

但是在不修改源文件的情况下,必须有另一种方法吗?

遇到了同样的问题,(非常简单的)解决方案似乎没有在的任何地方记录下来

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

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

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

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

我正在tokenfield内部进行typeahead,所以第一部分是访问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) {};

一种更简单的方法:

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