Обработка не приводит к автозаполнению jquery - PullRequest
9 голосов
/ 11 мая 2009

Эй, я пытаюсь вернуть сообщение, когда нет результатов по текущему запросу пользователя! я знаю, что мне нужно подключиться к событию keyup, но похоже, что плагин использует его

Ответы [ 4 ]

9 голосов
/ 22 ноября 2011

Этот вопрос действительно устарел, в любом случае, я работаю с новым jQuery UI 1.8.16, автозаполнение теперь совсем другое: http://jqueryui.com/demos/autocomplete/#default

В любом случае, если вы пытаетесь сделать то же самое, что задает вопрос, больше нет функции разбора, насколько я знаю, нет функции, которая вызывается с результатами поиска.

Мне удалось это сделать, переопределив функцию фильтра автозаполнения - Примечание: это повлияет на все ваши автозаполнения

$.ui.autocomplete.filter = function(array, term) {
            var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );

            var aryMatches = $.grep( array, function(value) {
                return matcher.test(value.label || value.value || value);
            });

            if (aryMatches.length == 0){
                aryMatches.push({
                    label: '<span class="info" style="font-style: italic;">no match found</span>',
                    value: null
                });                     
            }

            return aryMatches;
        };

Функция немного изменена из исходного кода, вызов grep такой же, но если результатов нет, я добавляю объект со значением null, затем я перезаписываю вызовы select, чтобы проверить наличие нулевого значения.

Это дает вам эффект, когда, если вы продолжаете печатать, и совпадений не найдено, в раскрывающемся списке вы получите элемент «совпадений не найдено», что довольно круто.

Чтобы переопределить выбранные вызовы, см. jQuery UI Отключение автозаполнения событий Select & Close

$(this).data('autocomplete').menu.options.selected = function(oEvent, ui){

            if ($(ui.item).data('item.autocomplete').value != null){
                //your code here - remember to call close on your autocomplete after


            }
        };

Так как я использую это во всех своих автозаполнениях на странице, убедитесь, что сначала вы проверили, является ли значение пустым! Прежде чем пытаться ссылаться на ключи, которых там нет.

6 голосов
/ 11 мая 2009

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

В этом примере предполагается, что вы получаете массив объектов JSON, которые содержат атрибуты FullName и Address.

   $('#search').autocomplete( {
       dataType: "json",
       parse: function(data) {
         var array = new Array();
         if (!data || data.length == 0) {
             // handle no data case specially
         }
         else {
            for (var i = 0; i < data.length; ++i) {
               var datum = data[i];
               array[array.length] = { 
                                       data: datum,
                                       value: data.FullName + ' ' + data.Address,
                                       result: data.DisplayName
                                     };
            }
         }
         return array;
       }
   });
2 голосов
/ 26 апреля 2013

Вы также можете использовать событие «response» для проверки этого. Простой, но мощный. http://api.jqueryui.com/autocomplete/#event-response

response: function (event, ui) {
            if (ui.content.length == 0) {
                //Display an alert or something similar since there are no results
            }
        },
2 голосов
/ 29 января 2012

Я использую следующий код для той же цели (сообщение отображается в списке автозаполнения):

success: function(data, status, xhr){                       
    if(!data.length){
        var result = [
            {
                label: 'There are no matches for your query: ' + response.term, 
                value: response.term
            }
        ];
        response(result);
    }
    else{
        // normal response
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...