2013-06-10 12 views
5

Ho un campo di input, e ha un evento KeyUp:Come aggiungere un timer di attesa su un evento keyup del campo di input?

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

Come si aggiunge un tempo di ritardo, in modo che solo quando l'utente si fermò a digitare per 1 secondo, allora sarà eseguire la funzione doSearch. Non voglio continuare a eseguirlo ogni volta che l'utente digita una chiave perché se digita veloce, allora sarà in ritardo.

risposta

12

Fondamentalmente, impostare un timeout su ogni keyup. Se è già in esecuzione un timeout, cancellarlo e impostarne un altro. La funzione DoSearch() verrà eseguita solo quando il timeout può essere completato senza essere reimpostato da un'altra chiave (ad esempio, quando l'utente ha smesso di digitare per 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

Ho modificato il mio primo post sopra, check it out. – omega

+0

@omega, mi scuso, ero concentrato a licenziare l'evento dopo il timeout che non ho prestato attenzione al valore che stavi passando. Ovviamente '$ (this)' non ha funzionato, perché è in un ambito di funzione diverso. Si prega di vedere la mia modifica attuale. Grazie. –

Problemi correlati