2009-05-11 18 views

Respuesta

6

Puede intentar suministrar una opción de análisis (función para manejar el análisis de datos) y hacer lo que necesita cuando no se devuelven resultados para analizar .

Este ejemplo supone que está obteniendo una matriz de objetos JSON que contienen los atributos FullName y 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 nice idea thanks dude! –

+0

¡Gracias a un millón de tíos, trabajando con encanto! –

+0

Agradable, me ayudó mucho: D – Mert

9

Esta pregunta es realmente fuera de fecha, de todos modos estoy trabajando con la nueva interfaz de usuario jQuery 1.8.16, autocompletar es ahora muy diferente: http://jqueryui.com/demos/autocomplete/#default

De todas formas, si usted está tratando de hacer el la Lo mismo que pregunta, no hay más función de análisis, por lo que sé, no hay ninguna función que se llame con los resultados de búsqueda.

La manera me las arreglé para sacar esto adelante es anulando la función de filtro de la autocompletar - Nota: esto afectará a todos tus completa automáticamente a

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

La función se modifica ligeramente de la fuente, la llamada grep es la misma , pero si no hay resultados agrego un objeto con un valor nulo, luego anulo las llamadas de selección para verificar si hay un valor nulo.

Esto le da un efecto en el que si sigue escribiendo y no se encuentran coincidencias, obtiene el elemento "No se encontraron coincidencias" en el menú desplegable, que es bastante bueno.

Para sustituir las llamadas Seleccione ver 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 


      } 
     }; 

Desde que uso esto en todos mis completa automáticamente en una página, asegúrese de comprobar si el valor es nulo primero! Antes de intentar hacer referencia a las claves que no están allí.

+0

jaja hice esa pregunta hace años, estoy seguro de que lo haría de manera diferente ahora con un patrón mucho más elegante, pero gracias de todos modos –

2

estoy usando el siguiente código para el mismo propósito (el mensaje se muestra en la lista de autocompletar):

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 
    } 
} 
Cuestiones relacionadas