закрыть автозаполнение jquery, если запрос не похож на данные - PullRequest
1 голос
/ 10 марта 2012

У меня есть скрипт, который позволяет отображать предложения Google. Проблема заключается в том, что он по-прежнему отображает список, даже если значение ввода отличается от доступных данных, я бы предпочел его закрыть. Взгляните на эту скрипку: JsFiddle

Введите букву, а не какую-нибудь ерунду, например "cjfsdkcrdvhcxrbsks". Вы увидите, что список все еще отображается. Так как мне закрыть его, если значение не соответствует предложению?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Вы действительно получили ошибку, если взглянули на консоль.

Когда поиск не возвращает результатов, объект data.query.results.toplevel равен нулю . Поскольку вы не проверяете это, при попытке доступа к data.query.results.toplevel.CompleteSuggestion возникает исключение, и меню не закрывается просто потому, что код просто перестает работать.

Проверьте наличие нуля для data.query.results.toplevel и, если оно равно нулю, используйте response([]);, чтобы закрыть меню:

success: function(data) {

    if (typeof data == 'string') {
        data = $.parseJSON(data);
    }

    if (data.query.results.toplevel === null) {
        // passing an empty array to response callback closes the menu
        response([]);
        return;
    }

    response(
        $.map(
        data.query.results.toplevel.CompleteSuggestion,
            function(item) {
                return {
                    label: item.suggestion.data,
                    value: item.suggestion.data
                };
        }));
}

DEMO

1 голос
/ 10 марта 2012
 success: function(data) {

          if (typeof data == 'string') data = $.parseJSON(data);
          if (data.query.results.toplevel == null){
                   $(this).autocomplete("close"); return;
          }

только что проверил, что возвращает страница, используя firebug, и это должно сработать, надеюсь

...