在JQuery中链接自动完成

时间:2013-12-04 01:52:59

标签: javascript jquery autocomplete

我正在开发一个人们可以提问并获得答案的网络应用程序。为了提高可用性,我们尝试在客户端获得服务器支持的自动完成功能,以帮助用户构建查询。

一个例子是,用户开始输入“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);
        });
    }
});

1 个答案:

答案 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的代码,我很满意。