2010-06-12 11 views
37

tengo el siguiente código porque quiero buscar en una base de datos como un usuario está escribiendo en un cuadro de texto. Este código a continuación funciona bien, pero parece un poco ineficiente, ya que si un usuario escribe muy rápido, potencialmente estoy haciendo muchas más búsquedas de las necesarias. Así que si un usuario está escribiendo en "vela"búsqueda optimizada utilizando ajax y tecla

estoy buscando en "vela", "saili", "sailin", y "vela"

quería ver si había una manera de detectar cualquier tiempo particular entre presionar teclas así que solo busque si el usuario deja de escribir durante 500 milisegundos o algo como esto.

¿hay mejores prácticas para algo como esto?

$('#searchString').keypress(function(e) { 

    if (e.keyCode == 13) { 

     var url = '/Tracker/Search/' + $("#searchString").val(); 
     $.get(url, function(data) { 
      $('div#results').html(data); 
      $('#results').show(); 
     }); 
    } 
    else { 

     var existingString = $("#searchString").val(); 
     if (existingString.length > 2) { 
      var url = '/Tracker/Search/' + existingString; 
      $.get(url, function(data) { 
       $('div#results').html(data); 
       $('#results').show(); 
      }); 
     } 
    } 

Respuesta

77

Usted puede hacer algo como esto:

$('#searchString').keyup(function(e) { 
    clearTimeout($.data(this, 'timer')); 
    if (e.keyCode == 13) 
     search(true); 
    else 
     $(this).data('timer', setTimeout(search, 500)); 
}); 
function search(force) { 
    var existingString = $("#searchString").val(); 
    if (!force && existingString.length < 3) return; //wasn't enter, not > 2 char 
    $.get('/Tracker/Search/' + existingString, function(data) { 
     $('div#results').html(data); 
     $('#results').show(); 
    }); 
} 

Lo que esto hace es realizar una búsqueda (en keyup, mejor que keypress para estas situaciones) después 500ms mediante el almacenamiento de un temporizador en el #searchString elemento de .data() collection . Cada keyup borra ese temporizador, y si se ingresó la tecla, busca inmediatamente, si no se establece otro 500ms tiempo de espera antes de la búsqueda automática.

+5

+1 Por ejemplo código. – johnwards

+0

Si alguien tiene problemas con este código, mira esto: http://stackoverflow.com/a/1171758/849829 –

+0

¡increíble! gran código! gracias! – anand

Cuestiones relacionadas