我正在将一些JavaScript代码转换为jQuery并且已经停止了,
继承人代码......
HTML:
<div id="text"></div>
JavaScript的:
keywords = [ "one", "two", "three"]
var allowed = true;
function ChangeText ( ) {
if(allowed)
{
var keyword = keywords[ Math.floor( Math.random() * keywords.length ) ]
document.getElementById( "text" ).innerHTML = keyword;
}
setTimeout( "ChangeText()", switchTime );
}
ChangeText();
jQuery的:
var changeAllowed = true;
$(document).ready(function ChangeText() {
if(changeAllowed)
{
$("#text").fadeOut(500);
var keyword = keywords[ Math.floor( Math.random() * keywords.length ) ];
$("#text").text(keyword).fadeIn(1000);
};
setTimeout( "ChangeText()", 2000 );
});
ChangeText();
它应该做的是将文本淡出然后每2秒左右用一个新字符串(它在刷新时执行),jQuery效果正常工作,它似乎只是setTimeout()或我'没有正确命名这个功能。
答案 0 :(得分:7)
将字符串传递给setTimeout
将从全局范围进行评估,其中未定义函数。直接传递它,以便它将从函数的范围进行评估,其中函数(显然) 定义:
setTimeout( ChangeText, 2000 );
答案 1 :(得分:4)
setTimeout( arguments.callee, 2000 );
arguments.callee
是函数的“自我指针”。最大的优点是它可以与匿名函数和命名函数一起使用。所以,对于jQuery:
var changeAllowed = true;
var keywords = [anything];
$(document).ready(function () {
if(changeAllowed) {
var keyword = keywords[ Math.floor( Math.random() * keywords.length ) ];
$("#text").fadeOut(500).text(keyword).fadeIn(1000);
};
setTimeout(arguments.callee, 2000 );
});
注意:此答案来自2008年。如今,正确的方法已经改变了。如评论中所述,您将使用命名函数表达式(NFE),如下所示:
var changeAllowed = true;
var keywords = [anything];
$(document).ready(function fadeKeyword() {
if(changeAllowed) {
var keyword = keywords[ Math.floor( Math.random() * keywords.length ) ];
$("#text").fadeOut(500).text(keyword).fadeIn(1000);
};
setTimeout(fadeKeyword, 2000 );
});
arguments.callee
仍将在非严格模式下工作,但严重时会导致错误。
答案 2 :(得分:3)
使用它而不用parens和引号:setTimeout(ChangeText, 2000 );
答案 3 :(得分:2)
<强>更新强>
当显示队列落后时,我的第一个解决方案失去了同步。以下是使用回调的更新代码,因此时间总是正确的,以及test fiddle:
var changeAllowed = true;
var keywords = ["test1", "test2", "test3", "test4", "test5"];
var hide = true;
var toggleTextFade = function() {
if(changeAllowed) {
var keyword =keywords[Math.floor(Math.random() * keywords.length)];
$("#text").text(keyword).fadeIn(1000,null,function(){
$("#text").fadeOut(500,null,toggleTextFade)});
}
};
$(document).ready(toggleTextFade);