2009-05-11 3 views

ответ

6

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

В этом примере предполагается, что вы возвращаете массив объектов 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; 
     } 
    }); 
+0

hmmm хорошая идея спасибо чувак! –

+0

Спасибо, миллион чуваков, работайте в обаянии! –

+0

Ницца, мне очень помог: D – Mert

9

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

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

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

$.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 Autocomplete disable Select & Close events

$(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 


      } 
     }; 

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

+0

haha ​​Я задал этот вопрос много лет назад, я уверен, что теперь я сделаю это по-другому, с более элегантным рисунком, но спасибо в любом случае –

2

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

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 
    } 
} 
2

Вы можете также использовать «ответ» событие, чтобы изучить это. Простой, но мощный. 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 
      } 
     }, 
Смежные вопросы