Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

jquery delay

şimdi her harfe basılışında veri çektiriyorum. o tamam, oldu. veri çekme koduna da delay koydum oldu. ama şöyle bir sıkıntı var. 1 saniye delay koydum diyelim. ben hızlı şekilde sorgumu yazınca kod benden geri kalmış olsa bile tek tek her harfe göre veriyi çekerek sona kadar geliyor. bu sıkıntıyı çözemedim. performansı etkileyecektir. bildiğiniz üzere normalde autocomplete'lerde bir harfin delay süresi bitmeden yeni harf girilirse önceki iptal oluyor. bu yüzden de hızlı yazılan durumlarda sadece en son yazdığınızı sorguluyor. performans açısından problem olmuyor.

ben de onlar gibi nasıl yaparım?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • Kesali adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    11 yıl önce güncellenmiş
    208 cevap - 2 soru
    Aslında yapmak istediğiniz şey çok basit. keyUp içine içinedeki delay ın önüne .stop() eklerseniz her key basışınızda delay işlemi durdurulur. Bu şekilde javascript sizden geride kalmaz.


    Edit: Aşağıdaki kod ile sorun çözülmüştür.

    var delay = (function(){
      var timer = 0;
      return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
      };
    })();
    
    
    $('#target').keyup(function(e){
      
        var video = $("#target").val(); 
        var Karakter = String.fromCharCode(e.which);
      
        delay(function(){
            if (/^[A-Za-z]+$/.test(Karakter) || /^[0-9]+$/.test(Karakter)) { 
              $('#sonuc').load('sonuc.php?v='+encodeURIComponent(video));
            } 
        }, 1000 );
    });
    
    • remy1 adlı üyenin fotoğrafı remy1
      hocam ben delay() derken lafın gelişi demiştim. ben delay ile fonksiyon geciktirmeyi bulamamıştım eğer öyle daha iyiyse onu da yazarsanız sevinirim.

      setTimeout(sample,500);

      ben delay'i yukarıdaki şekilde sağlıyorum. zaman bitince sample fonksiyonum çalışıyor. stop()'u bunun neresine koyacağım? buna koyulmazsa veya delay() ve stop()'un ikisininde kullanılarak yapılmış hali daha iyiyse onu yazar mısınız?
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Kodunuzun timeout kısmını yollarmısnız. Bir bakalım neler yapabiliriz.

      Örnek kod.

      $("#button").click(function(){
        $(this).stop().delay(1000).trigger("sample");
      });
      
      
      11 yıl önce yazılmış 11 yıl önce güncellenmiş
    • remy1 adlı üyenin fotoğrafı remy1
      timeout derken ne demek istediniz hocam?

      eğer yapılacak işlem diyorsanız;

      $('#sonuc').load('sonuc.php?v='+encodeURIComponent(video));

      böyle bir load yapıyorum.
      11 yıl önce yazılmış
    • remy1 adlı üyenin fotoğrafı remy1
      verdiğiniz kodu koydum. ama çalışmadı. keyup&#39;ın içinde girilen değerrin karakter ve rakam olup olmadığının kontrolünün içine koydum bu arada.eğer karakter veya rakamsa delay ile fonksiyonu gerçekleştir demek istedim. ama olmadı.
      11 yıl önce yazılmış 11 yıl önce güncellenmiş
    • Kesali adlı üyenin fotoğrafı Kesali
      Örnek kod çalışmaz sadece delay örneği olsun diye öle bir kod. $.load kısmında bir sorun yok. İstediğiniz şey birkaç farklı şekilde yapılabilieceği için tam işinizi göreni yapmak için javascript kodunuzun setTimeout ve keyUp bölümünü eklerseniz düzenleyebilirim demek istedim.
      11 yıl önce yazılmış
    • remy1 adlı üyenin fotoğrafı remy1
      keyup'ı burada açıyorum.

      $("#target").keyup(function (e) {

      var video = $("#target").val();
      var Karakter = String.fromCharCode(e.which);

      burada eğer karakterse-rakamsa işlemi yap diyorum. o araya gecikmeli işlem gelmeli.

      if (/^[A-Za-z]+$/.test(Karakter) || /^[0-9]+$/.test(Karakter)) {
      }


      }

      olay bundan ibaret işlemi direk yazabiliriz de, sample fonksiyonuna da alabiliriz. benim bulduğum fonksiyona aldığı için öyle yapmıştım. settimeout'u hala anlamadım. ama kod bundan ibaret. bir de dışta document.ready var tabii ki.
      11 yıl önce yazılmış 11 yıl önce güncellenmiş
    • Kesali adlı üyenin fotoğrafı Kesali
      Kodunuzu modifiye ettim böyle çalışması lazım.

      timeout = undefined;
      
      $("#target").keyup(function(e) {
          if(timeout !== undefined) {
            clearTimeout(timeout);
          }
        
          var video = $("#target").val(); 
          var Karakter = String.fromCharCode(e.which);
        
          var timeout = setTimeout(function() {
            timeout = undefined;
              if (/^[A-Za-z]+$/.test(Karakter) || /^[0-9]+$/.test(Karakter)) { 
                $('#sonuc').load('sonuc.php?v='+encodeURIComponent(video));
              } 
          }, 1000);
      });
      
      11 yıl önce yazılmış
    • remy1 adlı üyenin fotoğrafı remy1
      veri çekmeyi başardım ama hızlı yazınca yine arkadan tek tek bana yetişiyor. son yazdığımı yüklemiyor. bu haliyle bir faydası olmaz sanırım?
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Bazı hatalar yapmışım bende fark ettim. Şöyle bir örnek gördüm gayet güzel çalışıyor.

      var delay = (function(){
        var timer = 0;
        return function(callback, ms){
          clearTimeout (timer);
          timer = setTimeout(callback, ms);
        };
      })();
      
      $('input').keyup(function() {
          delay(function(){
            alert('Time elapsed!');
          }, 1000 );
      });
      



      Sizin kodunuza uygulanmış halide burda.

      var delay = (function(){
        var timer = 0;
        return function(callback, ms){
          clearTimeout (timer);
          timer = setTimeout(callback, ms);
        };
      })();
      
      
      $('#target').keyup(function(e){
        
          var video = $("#target").val(); 
          var Karakter = String.fromCharCode(e.which);
        
          delay(function(){
              if (/^[A-Za-z]+$/.test(Karakter) || /^[0-9]+$/.test(Karakter)) { 
                $('#sonuc').load('sonuc.php?v='+encodeURIComponent(video));
              } 
          }, 1000 );
      });
      
      11 yıl önce yazılmış 11 yıl önce güncellenmiş
    • remy1 adlı üyenin fotoğrafı remy1
      kusursuz çalıştı. çok teşekkürler yardımlarınız için hocam.
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Rica ederim.
      11 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.