1

我想为 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/

4

5 回答 5

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();
于 2012-10-31T15:11:19.553 回答
0

你想延迟等待的打印吗?如果是这样的话,在你里面使用一个函数就会像这样超时

var wait = $("li:last").index()*4000;
setTimeout (function() {
    document.write(wait+'<br>');
}, wait);
于 2012-10-31T15:10:32.877 回答
0

错误不在于等待。等待工作正常...

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

http://jsfiddle.net/6e7kL/

问题是argument.callee在您的 JS Fiddle 中没有定义。

于 2012-10-31T15:11:34.267 回答
0

首先,不要使用document.write. 它将清除整个页面,并替换它。其次,你想在这里做什么?你希望argument.callee在这里做什么?

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

var wait = $("li:last").index()*4000;
setTimeout (function(){
    alert('test');
}, wait);
​
于 2012-10-31T15:11:45.500 回答
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);

​</p>

于 2012-10-31T15:12:33.827 回答