在JQuery中链接自动完成

Chaining autocompletions in JQuery

本文关键字:链接 JQuery      更新时间:2024-03-15

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

一个例子是,用户开始输入"fo",我们建议使用已知的概念"foo bar",然后在选择该选项时,我们用所选的概念查询自动完成服务,然后向用户显示"What is foo bar(什么是foo bar)"answers"Where to find foo bar。

我们在JQuery中使用了自动完成插件,但在第二次访问服务器时遇到了问题。在JQuery自动完成的select选项中,我们使用新值启动另一个搜索,但即使我们得到了结果,选项面板也不会显示。

我们曾试图在搜索中破坏和重新创建它,试图触发"输入"answers"更改"事件,试图阻止面板关闭,并试图迫使面板打开,但似乎什么都不起作用。

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);
        });
    }
});

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的代码之外还有更好的解决方案,我会洗耳恭听。