2013-06-10 23 views
5

Ben bir giriş alanı var ve bu bir keyup olayı vardır: Kullanıcı 1 saniye süreyle yazarak durunca, o zaman DoSearch işlevini çalışacağı yüzden, bir gecikme süresini ekleyebilir nasılBir giriş alanı keyup olayında bekleme zamanlayıcısı nasıl eklenir?

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

. Kullanıcı bir anahtar yazdığında her zaman çalışmaya devam etmek istemiyorum çünkü hızlı yazıyorlarsa gecikecektir.

cevap

12

Temel olarak, her bir anahtarlığa bir zaman aşımı ayarlayın. Zaten bir zaman aşımı varsa, temizleyin ve başka bir tane ayarlayın. DoSearch() işlevi, yalnızca zaman aşımının başka bir anahtarlama tarafından sıfırlanmadan tamamlanmasına izin verdiğinde çalışır (yani, kullanıcı 1000ms için yazmayı durdurduğunda).

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

Yukarıdaki ilk yazımı düzenledim, bir göz atın. – omega

+0

@omega, özür dilerim, zaman aşımından sonra geçirdiğim değere dikkat etmediğim için olayı ateşlemeye odaklandım. Tabii ki, $ (bu) 'çalışmadı, çünkü farklı bir fonksiyon kapsamında. Lütfen mevcut düzenlememe bakın. Teşekkürler. –