我需要执行一段JavaScript代码,比如每2000毫秒。
setTimeout('moveItem()',2000)
以上将在2000毫秒后执行一个函数,但不会再执行它。
所以在我的moveItem函数中我有:
function moveItem() {
jQuery(".stripTransmitter ul li a").trigger('click');
setInterval('moverItem()',2000);
}
这不起作用,因为我想执行触发器单击jQuery一段代码,每个间隔2000毫秒,但是现在它一直被调用,脚本需要被中断。除此之外,我觉得这是非常差的质量编码......你们怎么解决这个问题?
答案 0 :(得分:182)
请注意,setTimeout
和setInterval
功能非常不同:
setTimeout
将在超时后执行代码。setInterval
将以提供的超时间隔执行代码 forever 。两个函数都返回计时器ID ,您可以使用它来中止超时。您所要做的就是将该值存储在变量中,并将其分别用作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's an interval, it'll loop forever)
}
function abortTimer() { // to be called when you want to stop the timer
clearInterval(tid);
}
两者都是实现同样目标的非常常见的方式。
答案 1 :(得分:6)
setInterval(moveItem, 2000);
是每隔2秒执行函数moveItem
的 方式。您的代码中的主要问题是您在回调内部而不是在回调之外调用setInterval
。如果我理解你想要做什么,你可以使用它:
function moveItem() {
jQuery('.stripTransmitter ul li a').trigger('click');
}
setInterval(moveItem, 2000);
N.B.:不要将字符串传递给setTimeout
或setInterval
- 最佳做法是传递匿名函数或函数标识符(如上所述)。另外,请注意不要混用单引号和双引号。选择一个并坚持下去。
答案 2 :(得分:2)
我相信您正在寻找setInterval()
答案 3 :(得分:2)
应该是:
function moveItem() {
jQuery(".stripTransmitter ul li a").trigger('click');
}
setInterval(moveItem,2000);
setInterval(f, t)
每隔f
毫秒调用一次参数函数t
。
答案 4 :(得分:0)
这里是带有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>
小提琴: DEMO
答案 5 :(得分:-2)
你应该尝试这样的事情:
function update(){
i++;
document.getElementById('tekst').innerHTML = i;
setInterval(update(),1000);
}
这意味着你必须创建一个函数来执行你需要做的事情,并确保它会以你喜欢的间隔调用自己。在你的身体onload中第一次调用这个函数:
<body onload="update()">