2013-06-10 14 views
5

Mam pole wprowadzania i ma zdarzenie keyup:Jak dodać licznik czasu oczekiwania w zdarzeniu kluczowania pola wejściowego?

$(document).ready(function() { 
    $('#SearchInputBox').keyup(function() { 
     DoSearch($(this).val()); 
    }); 
}); 

Jak mogę dodać opóźnienia, tak, że tylko wtedy, gdy użytkownik przestał wpisując na 1 sekundę, a następnie będzie uruchomić funkcję DoSearch. Nie chcę go uruchamiać za każdym razem, gdy użytkownik wpisze klucz, ponieważ jeśli będą pisać szybko, to będzie on opóźniony.

Odpowiedz

12

Zasadniczo, ustaw limit czasu dla każdego kluczowania. Jeśli istnieje już limit czasu, wyczyść go i ustaw inny. Funkcja DoSearch() będzie działać tylko wtedy, gdy limit czasu zostanie ukończony bez konieczności resetowania przez inne naciśnięcie klawisza (to znaczy, gdy użytkownik przestanie pisać przez 1000 ms).

var timeout = null; 
$('#SearchInputBox').on('keyup', function() { 
    var that = this; 
    if (timeout !== null) { 
     clearTimeout(timeout); 
    } 
    timeout = setTimeout(function() { 
     DoSearch($(that).val()); 
    }, 1000); 
}); 
+0

Edytowałem mój pierwszy wpis powyżej, sprawdź to. – omega

+0

@omega, przepraszam, byłem skoncentrowany na wystrzeliwaniu wydarzenia po upływie limitu czasu, że nie zwracałem uwagi na wartość, którą przekazałeś. Oczywiście '$ (this)' nie działało, ponieważ ma inny zakres funkcji. Zobacz moją aktualną edycję. Dzięki. –

Powiązane problemy