input'a kullanıcı adı girilirken belirli bir süre tuşa basılmazsa sorgu yapma
Merhaba
normalde keyup'la dinleme yaparken
her tuşa basıldığında ajaxla o kullanıcı adı var mı diye sorgu yapıyorum.
ama bu server tarafında gereksiz bir yük oluşturuyor.
butonla yada focusdan çıkınca da sorgu yapmak istemiyorum.
haliyle bana şöyle birşey gerekli
herkesin ortalama bir yazma hızı vardır tuşa basıldı ve örnek 10ms den fazla beklenirse sorgu yapsın
her tuşa basıldığında bir zaman döngüsü kaydedilipte yapılabilir ama daha farklı basit bir yöntemi var mı diye merak ettim.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Merhaba.
Ajax isteğinizi, her tuşa basıştan 300ms sonra atmanız gerekiyor. Tabii ki bu 300ms sayacı her tuşa basışta sıfırlanmalı.
let timeoutCounter = null; // 300ms'lik sayacımızı tutacak değişken.
$inputElement.on("input", function() {
clearTimeout(timeoutCounter); // input'a bir giriş olduğu için 300ms'lik sayacı sıfırlamak için temizleyelim. timeoutCounter değişkeni null'sa zaten bi'şey olmayacak. null değilse, setTimeout fonksiyonu iptal edilmiş olacak.
const text = $(this).val(); // İstekle gönderilecek text'i alalım.
if(!text) return; // text boşsa işlem yapılmayacak.
timeoutCounter = setTimeout(function() { // Sayacı sıfırlamıştık. Şimdi 300ms'ye tekrar kuralım ve sayacı timeoutCounter değişkenine atayalım.
$.ajax({ ... }); // Ajax isteği burada atılabilir. 300ms sonunda istek atılacak.
}, 300);
});