在setTimeout中使用jQuery变量

时间:2012-10-31 15:05:55

标签: jquery variables settimeout

我想在setTimeout中使用变量作为毫秒参数。

HTML

<ul>
<li>list item</li>
<li>list item</li>
<li>list item</li>
<li>list item</li>
</ul>

的jQuery

var wait = $("li:last").index()*4000;
document.write(wait+'<br>');
setTimeout (argument.callee, wait);

代码应根据有多少列表项计算等待时间,然后重复代码。这应该无限重复。我尝试了很多变种,它们都会产生错误。我确定它显而易见。有什么帮助吗?

这里是小提琴http://jsfiddle.net/sZ3KY/

5 个答案:

答案 0 :(得分:3)

arguments.callee ,而不是 argument.callee

检查此工作演示http://jsfiddle.net/sZ3KY/3/

<强>代码

var wait = $("li:last").index()*500;

function doIt() {
    document.write(wait+'<br>');
    setTimeout (arguments.callee, wait);
}

doIt();

答案 1 :(得分:0)

你想延迟打印等待吗?如果是这样的话,请在你内部使用一个函数,如此

var wait = $("li:last").index()*4000;
setTimeout (function() {
    document.write(wait+'<br>');
}, wait);

答案 2 :(得分:0)

错误与等待无关。等待工作正常......

var wait = $("li:last").index()*1000;
document.write(wait+'<br>');
setTimeout (function () { alert('Works') }, wait);

http://jsfiddle.net/6e7kL/

问题是你的JS小提琴中没有定义argument.callee

答案 3 :(得分:0)

首先,请勿使用document.write。它将清除整个页面,并替换它。第二,你想在这做什么?你期望argument.callee能在这里做什么?

如果你给它一个实际的功能,你的代码工作正常:

var wait = $("li:last").index()*4000;
setTimeout (function(){
    alert('test');
}, wait);
​

答案 4 :(得分:0)

我认为你的问题在于setTimeout需要一个函数。参见:

http://jsfiddle.net/sZ3KY/1/

var wait = $("li:last").index()*4000;
document.write(wait+'<br>');
setTimeout (function(){alert("I've waited "+wait/1000+"seconds before doing this")}, wait);