autocomplete.js从触发搜索中排除单词

时间:2015-09-30 13:26:03

标签: javascript jquery autocomplete

我正在使用http://autocompletejs.com/而我的客户正在询问是否可以排除某些字词,或者他们说是否已将这些字词视为中立",并且不会触发显示自动完成框

换句话说,让我们说下面的项目在我的列表中:

  • Tree Green
  • Tree Red
  • Tree Real
  • 树假冒
  • 树高
  • Tree Trunk
  • Plant Green
  • 植物布什

他们希望结果以Tree / Plant显示为第一个单词,但键入Tree或Plant不应触发列表。用户必须键入" Tree R"在任何结果出现之前。或者他们可以键入" R"在第二个单词中查看包含R的结果。

我无法设置minLength因为他们也希望用户能够输入" Re"查看红色/真实结果。

另一种解决方法是忽略我列表中所有项目的第一个单词。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看起来您可以设置preProcess选项: http://autocompletejs.com/examples#2003

或者更正确的选项可能是matchOptions选项: http://autocompletejs.com/examples#4041

在后者的情况下,想法是弄清楚用户的搜索词中有多少空格,然后仅返回具有相同空格量的结果。

注意:您还需要修剪用户的输入,以确保不会出现错误的结果。我假设您使用的是jQuery,因为.trim没有完全的浏览器兼容性,但可以在评论下方的行中实现自己的trim方法。

var matchOptions = function(input, matchedOptions, allOptions, value) {
    // NOTE: be sure to trim the input first.
    var term = $.trim(input)
        spacesInSearchTerm = term.split(" ").length,
        validOptions = [];

    for (var i = 0, l = matchedOptions.length; i < l; i ++) {
        if (matchedOptions[i].split(" ").length === spacesInSearchTerm)
            validList.push(list[l]);
    }

    return validOptions;
};