Мне нужно выполнить кусок кода JavaScript, скажем, каждые 2000 миллисекунд.
setTimeout('moveItem()',2000)
Вышеуказанная функция будет выполняться через 2000 миллисекунд, но не будет ее выполнять повторно.
Итак, внутри моей функции moveItem у меня есть:
function moveItem() {
jQuery(".stripTransmitter ul li a").trigger('click');
setInterval('moverItem()',2000);
}
Это не работает, потому что я хочу выполнить триггер, щелкнув кусок кода jQuery каждый интервал в 2000 миллисекунд, но сейчас он все время вызывается, а script должен быть прерван. Кроме того, я чувствую, что это очень плохое кодирование... Как бы вы, ребята, решили это?
Ответ 1
Обратите внимание, что setTimeout
и setInterval
- очень разные функции:
-
setTimeout
выполнит код один раз, после таймаута.
-
setInterval
будет выполнять код навсегда, с интервалом предоставленного таймаута.
Обе функции возвращают идентификатор таймера, который вы можете использовать для отмены таймаута. Все, что вам нужно сделать, это сохранить это значение в переменной и использовать его в качестве аргумента для clearTimeout(tid)
или clearInterval(tid)
соответственно.
Итак, в зависимости от того, что вы хотите сделать, у вас есть два допустимых варианта:
// set timeout
var tid = setTimeout(mycode, 2000);
function mycode() {
// do some stuff...
tid = setTimeout(mycode, 2000); // repeat myself
}
function abortTimer() { // to be called when you want to stop the timer
clearTimeout(tid);
}
или
// set interval
var tid = setInterval(mycode, 2000);
function mycode() {
// do some stuff...
// no need to recall the function (it an interval, it'll loop forever)
}
function abortTimer() { // to be called when you want to stop the timer
clearInterval(tid);
}
Оба являются очень распространенными способами достижения того же.
Ответ 2
setInterval(moveItem, 2000);
- это способ выполнения функции moveItem
каждые 2 секунды. Основная проблема вашего кода заключается в том, что вы вызываете setInterval
внутри, а не за пределы обратного вызова. Если я понимаю, что вы пытаетесь сделать, вы можете использовать это:
function moveItem() {
jQuery('.stripTransmitter ul li a').trigger('click');
}
setInterval(moveItem, 2000);
N.B.: Не передавать строки в setTimeout
или setInterval
- лучше всего использовать анонимную функцию или идентификатор функции (как я уже говорил выше). Кроме того, будьте осторожны, чтобы не смешивать одиночные и двойные кавычки. Выберите один и придерживайтесь его.
Ответ 3
Я считаю, что вы ищете setInterval()
Ответ 4
Это должно быть:
function moveItem() {
jQuery(".stripTransmitter ul li a").trigger('click');
}
setInterval(moveItem,2000);
setInterval(f, t)
вызывает функцию аргумента, f
, один раз каждые t
миллисекунды.
Ответ 5
Здесь используется функция автоматического цикла с кодом html. Надеюсь, это может быть полезно для кого-то.
<!DOCTYPE html>
<html>
<head>
<style>
div {
position: relative;
background-color: #abc;
width: 40px;
height: 40px;
float: left;
margin: 5px;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p><button id="go">Run »</button></p>
<div class="block"></div>
<script>
function test() {
$(".block").animate({left: "+=50", opacity: 1}, 500 );
setTimeout(mycode, 2000);
};
$( "#go" ).click(function(){
test();
});
</script>
</body>
</html>
Fiddle: DEMO
Ответ 6
Вы должны попробовать что-то вроде этого:
function update(){
i++;
document.getElementById('tekst').innerHTML = i;
setInterval(update(),1000);
}
Это означает, что вам нужно создать функцию, в которой вы делаете то, что вам нужно сделать, и убедиться, что она будет называть себя с нужным вам интервалом. В вашем теле onload вызовите функцию в первый раз следующим образом:
<body onload="update()">