我正在开发一个人们可以提问并获得答案的网络应用程序。为了提高可用性,我们尝试在客户端获得服务器支持的自动完成功能,以帮助用户构建查询。
一个例子是,用户开始输入“fo”并且我们建议使用已知的概念“foo bar”,并且在选择该选项时,我们使用所选概念查询自动完成服务,并向用户显示“什么”是foo bar“和”在哪里找到foo bar“。
我们在JQuery中使用自动完成插件,但在第二次点击服务器时遇到问题。在JQuery自动完成的选择选项中,我们使用新值启动另一个搜索,但即使我们得到结果,也不会显示选项面板。
我们尝试在搜索中销毁并重新创建它,尝试触发“输入”和“更改”事件,尝试阻止面板关闭并尝试强制打开面板但似乎没有任何效果。
this.searchBox.autocomplete({
delay: 200,
minLength: 0,
response: function (event, ui) {},
search: function (event, ui) {},
select: function (select, ui) {
self.searchBox.val(ui.item.value);
self.searchBox.autocomplete("search");
},
source: function (request, response) {
u.async.get(url, {
lan: "en",
q: request.term
}).success(function (data) {
response(data.Suggestions);
self.enable(data.Validity);
}).failure(function (data) {
console.log("fetch failure", data);
});
}
});
答案 0 :(得分:0)
此功能在JQuery中专门禁用与当前查询相同的术语。
从源代码
开始_searchTimeout: function( event ) {
clearTimeout( this.searching );
this.searching = this._delay(function() {
// only search if the value has changed
if ( this.term !== this._value() ) {
this.selectedItem = null;
this.search( null, event );
}
}, this.options.delay );
},
因此,我的解决方案是利用JQuery正在进行引用相等的事实,并在我的代码中创建它以便this.term
设置为new String(this._value())
。
如果Jquery开始进行词汇相等,那么这会破坏,但如果有人有一个更好的解决方案,而不是修改JQuery的代码,我很满意。