Автоматическое заполнение jQuery цепочечные запросы

public static void main(String[] args) {
    System.out.println(getMatches(List.of("OHIO", "WELL"), "HELLO HI THERE H E L L O WORLD WE LC OME", 1));
}

private static List<String> getMatches(List<String> words, String query, int editDistance) {
    return words.stream()
            .flatMap(w -> getMatches(w, query, editDistance).stream().map(String::trim))
            .distinct()
            .collect(Collectors.toList());
}

private static List<String> getMatches(String word, String query, int editDistance) {
    List<String> matches = new ArrayList<>();
    for (int i = 0; i < query.length(); i++) {
        StringBuilder candidate = new StringBuilder();
        StringBuilder candidateWithoutSpaces = new StringBuilder();
        populateCandidates(word, query, i, candidate, candidateWithoutSpaces);
        if (isMatch(candidateWithoutSpaces, word, editDistance)) matches.add(candidate.toString());
    }
    return matches;
}

private static boolean isMatch(StringBuilder candidateWithoutSpaces, String word, int editDistance) {
    if (candidateWithoutSpaces.length() != word.length()) return false;
    for (int i = 0; i < candidateWithoutSpaces.length(); i++) {
        if (candidateWithoutSpaces.charAt(i) != word.charAt(i) && --editDistance < 0) return false;
    }
    return true;
}

private static void populateCandidates(String word, String query, int i, StringBuilder candidate, StringBuilder candidateWithoutSpaces) {
    int j = 0;
    while (candidateWithoutSpaces.length() < word.length() && i + j < query.length()) {
        char c = query.charAt(i + j);
        candidate.append(c);
        if (c != ' ') candidateWithoutSpaces.append(c);
        j++;
    }
}

Выход

[O HI T, HELL, H E L L, WE LC]
6
задан madcapnmckay 12 May 2009 в 18:11
поделиться

2 ответа

@Ian Mckay - Чтобы автозаполнение для Venue было отфильтровано на основе города, вам необходимо привязать" изменение " событие Город следующим образом:

$(document).ready(function() {
    $('#Event_City').autocomplete({
      serviceUrl: '',
      minChars:2,
      width: 300,
      delimiter: /(,|;)\s*/,
      deferRequestBy: 150, //miliseconds
      params: { country: 'Yes' },
    }).change(function(){
        $('#Event_Venue').autocomplete({
          serviceUrl: '',
          minChars:2,
          width: 300,
          delimiter: /(,|;)\s*/,
          deferRequestBy: 150, //miliseconds
          params: { city: $("#Event_City").val() }
        });
    }); 
}); 
7
ответ дан 10 December 2019 в 00:44
поделиться

Причина, по которой он содержит значение по умолчанию, заключается в том, что автозаполнение прикрепляется к текстовому полю при загрузке страницы. Чтобы обновить его новым значением, плагин должен предоставить вам способ обновить свойства его объекта параметра или позволить вам уничтожить его на втором элементе, а затем перестраивать его каждый раз, когда пользователь изменяет первый. свою ценность. Выбранная вами библиотека автозаполнения выглядит довольно легкой (не всегда плохо ... в вашем случае это так ...) и, похоже, не поддерживает эту функцию.

Лучше всего я вам посоветую попробовать другую библиотека. Мне очень нравится этот вариант, поскольку он довольно универсален (демонстрационная страница):

http://view.jquery.com/trunk/plugins/autocomplete/demo/

3
ответ дан 10 December 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: