如何在选择项目时阻止预先关闭下拉菜单?我尝试过像这样使用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();
但是如果不修改源文件,还有另一种方法吗?
答案 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'
。)