2009-05-11 10 views

Odpowiedz

6

Możesz spróbować podać opcję parsowania (funkcja do przetwarzania danych) i zrobić to, czego potrzebujesz, gdy żadne wyniki nie zostaną zwrócone do analizy .

W tym przykładzie założono, że odzyskujesz tablicę obiektów JSON, które zawierają atrybuty FullName i 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 fajny pomysł dzięki stary! –

+0

Dzięki milionowi kolesi, pracujcie w uroku! –

+0

Miło, bardzo mi pomogło: D – Mert

9

to pytanie jest naprawdę nieaktualne jakikolwiek pracuję z nowym jQuery UI 1.8.16, autouzupełnianie jest teraz całkiem inna: http://jqueryui.com/demos/autocomplete/#default

Anyways, jeśli próbujesz do wykonaj tak samo jak pytanie, pyta, nie ma więcej funkcji parsowania, o ile wiem, nie ma funkcji, która jest wywoływana z wynikami wyszukiwania.

Sposób udało mi się ciągnąć ten off jest nadrzędnymi funkcji filtrować autouzupełniania za - Uwaga: będzie to miało wpływ na wszystkie Autouzupełnianie

$.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; 
     }; 

Funkcja jest lekko zmodyfikowany ze źródła, wywołanie grep jest taka sama , ale jeśli nie ma wyników, dodaję obiekt o wartości null, a następnie nadpisuję wywołania select, aby sprawdzić wartość pustą.

Daje to efekt, jeśli w dalszym ciągu piszesz i nie ma żadnych dopasowań, w menu pojawia się pozycja "brak pasujących elementów", co jest całkiem fajne.

przesłonić wybierz Połączenia zobaczyć 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 


      } 
     }; 

Ponieważ Używam tego na wszystkich moich Autouzupełnianie na stronie, pamiętaj, aby sprawdzić, czy wartość jest null pierwszy! Zanim spróbujesz odwołać się do kluczy, których tam nie ma.

+0

haha ​​zadałem to pytanie kilka lat temu, jestem pewien, że zrobiłbym to teraz inaczej z dużo bardziej eleganckim wzorem, ale dzięki, tak czy inaczej –

2

Używam następujący kod dla tego samego celu (komunikat jest wyświetlany na liście autouzupełniania):

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 
    } 
} 
Powiązane problemy