过滤jqueryUI自动完成选项

时间:2011-12-05 02:09:00

标签: javascript jquery jquery-ui jquery-ui-autocomplete

我在我的网站上使用jqueryUI自动完成小部件。假设我的数据库中有以下项目......

  • 苹果
  • 亚伯拉罕
  • 土豚

当我在自动完成小部件中输入“a”时,我会在输入字段下面找到该列表。我已经编写了额外的代码,当你选择一个项目时,它会被添加到输入字段下面的UL中,并且输入字段会被清除。

因此,您输入“a”,您会看到该列表,然后选择apple。 Apple现在是UL中输入字段以下的LI。你现在再次输入“a”,然后再次看到列表......这是我的问题。

这是第二次我要展示苹果以外的一切。

我很想知道如何在两个不同的地方做到这一点:

1 - 我很想知道如何拦截向服务器发出GET查询的事件,这样当你输入“a”时,我可以发送“q = a”给服务器,而不是“q = A和排除=苹果,FOO,栏”。然后我过滤列表服务器端,一切都很好。

2 - 我也很想知道如何拦截构建选项列表的事件。这样,我可以看到它将显示“apple,ape等”选项,我可以从该列表中删除“apple”。

我看到了文档中的事件 - 但我不确定如何使用它们来实现上述目标。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过为自动完成小部件的source选项定义函数来完成这两项操作。从那里开始,您将使用$.ajax自行执行AJAX请求。类似的东西:

$("input").autocomplete({
    source: function (request, response) {
        var exclude = /* build excluded items list. */;
        var term = request.term;

        $.ajax({
            url: "server.php",
            data: { q: term, exclude: exclude },
            dataType: "json",
            success: function(data) {
                /* Here, you could accomplish #2 by filtering items out of data */
                /* You must call the supplied callback to let the widget know what to suggest */
                response(data);
            }
        });

    }
});

我想你只需提取ul中已有的项目即可构建被排除的项目。