Проблемы с setInterval - PullRequest
       23

Проблемы с setInterval

1 голос
/ 02 февраля 2011

Я просто пытаюсь реализовать самый простой пример setInterval с помощью jQuery, и у меня возникли проблемы. Что здесь не так?

В нем говорится, что функция поворота не определена.

$(document).ready(function() {
    var speed = 5000;
    var run = setInterval("rotate()", speed);

    function rotate() {
        alert ('rotate');
    }
});

Ответы [ 8 ]

6 голосов
/ 02 февраля 2011

Сделайте это вместо:

$(document).ready(function() {
    var speed = 5000;

    function rotate() {
        alert ('rotate');
    }

    var run = setInterval(rotate, speed);
});

Вы также можете просто сделать это:

$(function() {
    var speed = 5000;

    var run = setInterval(function() {
        alert ('rotate');
    }, speed);
});

Вы должны объявить run вне готового обработчика событий, если вы хотите иметь возможность очистить интервал позже, так как в противном случае он выйдет из области действия.

2 голосов
/ 02 февраля 2011

Вы передаете setInterval строку в eval. Это:

  • Трудно отладить
  • Неэффективное
  • Гадкий
  • выполнено в другом объеме

Функция ограничена областью действия для функции, в которой она определена.

Вместо этого передайте функцию напрямую

    var run = setInterval(rotate, speed);
1 голос
/ 02 февраля 2011

Это фактически вращение в (как я верю, это) свой собственный контекст Измените его на

var run = setInterval(rotate, speed);

и все должно быть в порядке.

1 голос
/ 02 февраля 2011

опускаем скобки и заключаем в кавычки поворот в вашем вызове setInterval. Вы даете ему саму функцию, а не имя. Неважно, в каком порядке они идут.

0 голосов
/ 02 февраля 2011
$(function() {
   var speed = 5000;
   var rotate = function() {
      alert("rotate");
   };

   window.setInterval(rotate, speed);
});
0 голосов
/ 02 февраля 2011

Вам необходимо определить rotate в глобальной области видимости.

$(document).ready(function() {
    window.rotate = function() {
        alert ('rotate');
    }
    var speed = 5000;
    var run = setInterval("rotate()", speed);
});
0 голосов
/ 02 февраля 2011

это работает

$(document).ready(function() {
    function rotate() {
        alert ('rotate');
    }
    var speed = 5000;
    var run = setInterval(function() { rotate() }, speed);

});
0 голосов
/ 02 февраля 2011

или даже выведите функцию поворота за пределы функции готовности.

...