SORU
30 EYLÜL 2009, ÇARŞAMBA


, SetTimeout çalışmıyor JQuery

Hala yeni bir WordPress kullanmak için geldim, ajax verdiğim örnek işe gidip gelmek için yolda setTimeout ile durduruldu aldım. Aşağı eklemek gereken yerde kırık var "." div her saniye.

İlgili kod iki dosya.

index.html

<html><head>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript' src='myCode.js'></script>
</head>
<body>
<div id='board'>Text</div>
</body>
</html>

vemyCode.js

(function(){
   $(document).ready(function() {update();});

   function update() { 
      $("#board").append(".");
      setTimeout('update()', 1000);     }
 })();

dosya çalışıyor Tamam ve "() güncelleme" aracılığıyla ilk kez ama bir daha asla çalışır.mycode.js Senin yardım takdir, bu konuda duvara kafamı vurmaya başladım

CEVAP
30 EYLÜL 2009, ÇARŞAMBA


Sorunlar burada bir çift var.

Öncelikle, anonymous function içinde kod tanımlama. Bu yapı:

(function() {
  ...
)();

iki şey yapar. İsimsiz bir fonksiyon tanımlar ve onu çağırır. Bunu yapmak için kapsamı nedeni vardır ama aslında istediğinin bu olduğundan emin değilim.

setTimeout() kod bloğunda geçen sensin. Sorun update() böyle çalıştırıldığında kapsamında değildir. Eğer bu işleri yerine çok işlevi bir işaretçi geçirmek: bunu ancak

(function() {
  $(document).ready(function() {update();});

  function update() { 
    $("#board").append(".");
    setTimeout(update, 1000);     }
  }
)();

bu işlev işaretçisi çünkü update Bu blok kapsamında yer almaktadır.

Ama dediğim gibi, bu gibi yazabilirsiniz adsız işlevi için ihtiyaç vardır

$(document).ready(function() {update();});

function update() { 
  $("#board").append(".");
  setTimeout(update, 1000);     }
}

ya

$(document).ready(function() {update();});

function update() { 
  $("#board").append(".");
  setTimeout('update()', 1000);     }
}

ve her ikisi de bu iş. İkinci kod bloğu içinde update() kapsamında şu an için çalışır.

Ben de $(function() { ... } kısaltılmış blok şeklinde tercih ve update() içinde setTimeout() arama yerine setInterval() yerine kullanabilirsiniz:

$(function() {
  setInterval(update, 1000);
});

function update() {
  $("#board").append(".");
}

O kadar temizler umuyoruz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Rachel Talbott

    Rachel Talbo

    26 Ocak 2011