我正在使用bootstrap-typeahead.js v2.0.0进行自动完成搜索。我有一个click事件来查看结果,但它只有10次中的1次,在另一种情况下我得到一个错误:“Uncaught SyntaxError:Unexpected token u”。
我环顾四周找到了这个:https://github.com/twitter/bootstrap/issues/4018我在那里尝试了解决方案,但似乎没有任何效果。当我使用enter键时它非常完美,所以它必须与click-event有关。其他人有同样的问题吗? 代码:
$('#search').typeahead({
source: function (typeahead, query) {
$.ajax({
type: "GET",
url: "search/" + query,
success: function (data) {
searchResult = data;
return typeahead.process(data);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(thrownError);
}
});
}
},
onselect: function (obj) {
window.location.href = "view/" + obj.id;
},
items: 8,
minLength: 1,
highlighter: function (item) {
var artist = _.find(searchResult, function (a) {
return item === a.value;
});
return ('<li>' + artist.value + ' (' + artist.dbirth + '-' + artist.ddeath + ')<li>');
}
});
答案 0 :(得分:1)
好的,我自己解决了。这就是你要做的事情:
打开bootstrap-typeahead.js并在第203行找到listen方法并修改如下:
listen: function () {
this.$element
.on('blur', $.proxy(this.blur, this))
.on('keypress', $.proxy(this.keypress, this))
.on('keyup', $.proxy(this.keyup, this))
// if ($.browser.webkit || $.browser.msie) {
this.$element.on('keydown', $.proxy(this.keypress, this))
// }
this.$menu
.on('click', $.proxy(this.click, this))
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
.on('mouseleave', 'li', $.proxy(this.mouseleave, this))
}
这里唯一的区别是我在'mouseleave'上添加了一个监听器。
转到第278行的mouseenter方法并将其更改为:
mouseenter: function (e) {
$(e.currentTarget).addClass('active')
}
然后添加一个名为'mouseleave'的新方法并添加以下代码:
mouseleave: function () {
this.$menu.find('.active').removeClass('active')
}
希望这可以帮助任何有类似问题的人。
答案 1 :(得分:0)
这是一个更简单的解决方案。 “Blur”事件在click事件之前绑定。只需为模糊添加延迟,这将解决问题。
<input type="text" placeholder="Enter a Name" onblur="hidesuggest();" id="suggestbox">
<script>
function hidesuggest(){
setTimeout("$('#suggestbox').toggle();",200);
}
</script>
额外的200毫秒为“点击”绑定提供了足够的时间来执行鼠标点击。