v2.5.2
Giriş yap

input'a kullanıcı adı girilirken belirli bir süre tuşa basılmazsa sorgu yapma

istek61
406 defa görüntülendi

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.

Cevap yaz
Cevaplar (3)
ebykdrms
864 gün önce

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);
});
ersiin
864 gün önce

input value length'i 3ün altında olursa ya da 2nin altında olursa sorgu yapılmasın şeklinde de ayarlarsan çok daha iyi olur.

shinga
865 gün önce

zaman döngüsü şart kullanıcı tuşa basmadığı zamanı dinlemen gerekiyor 10ms basmadığı zaman sorgu yapıcaksın