我正在使用this fork of the Twitter Bootstrap typeahead library,它允许异步数据源以及onselect事件。到目前为止,它对我来说非常好用,但是当用户选中该字段时(即没有主动选择下拉条目),将触发onselect事件(在我的情况下,将用户重定向到另一个页面)。如果用户没有点击,有什么方法可以阻止onselect事件被触发?这是我到目前为止所得到的(在CoffeeScript中):
$(document).ready ->
$('#inspection_name').typeahead(
source: (typeahead, query) ->
$.ajax(
url: "/inspections/search.json?name="+query
success: (data) =>
return_list = []
$(data.results.inspections).each ->
return_list.push("<span data-url='" + this.uri + "/edit'>" + this.name + ", " + this.town + "</span>")
typeahead.process(return_list)
)
onselect: (obj) =>
window.location.href = $(obj).attr("data-url")
)
答案 0 :(得分:6)
对于默认的Bootstrap,这将起作用:
$.fn.typeahead.Constructor.prototype.render = function (items) {
var that = this;
items = $(items).map(function (i, item) {
i = $(that.options.item).attr('data-value', item);
i.find('a').html(that.highlighter(item));
return i[0];
});
this.$menu.html(items);
return this;
};
包括bootstrap之后的某个地方。(分钟)js
答案 1 :(得分:5)
最后,我回答了自己的问题,并将调整放在这个要点中:
答案 2 :(得分:3)
您可以在angular-bootstrap typehead
中设置属性typeahead-focus-first="false"
类似的选项可用于jQuery
答案 3 :(得分:1)
所有的功劳都应归功于@jrochkind,但我想在此提及Bibliographic Wilderness: Overriding bootstrap typeahead to not initially select的答案,以便更清晰。
在bootstrap.js
之后的某处添加:
/**
* Makes it so the first typeahead result isn't auto selected
*
* @author Jonathan Rochkind
* @url http://bibwild.wordpress.com/2013/04/04/overriding-bootstrap-typeahead-to-not-initially-select/
*/
$.fn.typeahead.Constructor.prototype.select = function() {
var val = this.$menu.find('.active').attr('data-value');
if (val) {
this.$element
.val(this.updater(val))
.change();
}
return this.hide()
};
var newRender = function(items) {
var that = this
items = $(items).map(function (i, item) {
i = $(that.options.item).attr('data-value', item);
i.find('a').html(that.highlighter(item));
return i[0];
});
this.$menu.html(items);
return this;
};
$.fn.typeahead.Constructor.prototype.render = newRender;