Вопрос

Я все еще новичок в jQuery, на пути к тому, чтобы заставить мой пример Ajax для работы, я остановился на SetTimeout. Я разбил его туда, где он должен добавить «». в DIV каждую секунду.

Соответствующий код находится в двух файлах.

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>

а также mycode.js

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

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

Файл mycode.js работает хорошо, и «Update ()» работает в первый раз, но никогда больше.

Это было полезно?

Решение

У вас есть несколько проблем здесь.

Во -первых, вы определяете свой код в анонимная функция. Анкет Эта конструкция:

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

делает две вещи. Он определяет анонимную функцию и вызывает ее. Есть причины, чтобы сделать это, но я не уверен, что это то, что вы действительно хотите.

Вы передаете в кодовом блоке setTimeout(). Анкет Проблема в том, что update() не в пределах действия, когда так исполняется. Однако, если вы пройдете в указатель функции вместо этого, так что это работает:

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

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

Потому что указатель функции update находится в рамках этого блока.

Но, как я уже сказал, нет необходимости в анонимной функции, так что вы можете переписать ее так:

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

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

или же

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

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

И оба эти работы. Второй работает, потому что update() В пределах блока кода сейчас в рамках.

Я также предпочитаю $(function() { ... } сокращенная форма блока и вместо вызова setTimeout() в пределах update() Вы можете просто использовать setInterval() вместо:

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

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

Надеюсь, это очистит это.

Другие советы

setInterval(function() {
    $('#board').append('.');
}, 1000);

Вы можете использовать ClearInterval, если хотите остановить его в один момент.

SetTimeout используется для выполнения вашего набора кода для выполнения после указанного периода времени, поэтому для ваших требований лучше использовать SetInterval, потому что это будет вызывать вашу функцию каждый раз в указанный интервал времени.

Это делает то же самое, но намного проще:

$(document).ready(function() {  
   $("#board").delay(1000).append(".");
});

Вы можете использовать задержку практически до любого метода jQuery.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top