Javascript Mozilla文档中的setInterval()示例不在JSFIDLE中工作
我复制了Mozilla文档中关于setInterval()的示例#2,但在我的JSFIDLE中,文本的颜色不会在红色和蓝色之间交替: 演示: 这不可能是因为我需要jQuery或者是因为标记,对吧?我把它抄了一遍 我还想问一下澄清的目的:var nIntervId的原因;在顶部定义为全局变量,以便它可以在changeColor()和stopTextColor()函数中使用,对吗Javascript Mozilla文档中的setInterval()示例不在JSFIDLE中工作,javascript,Javascript,我复制了Mozilla文档中关于setInterval()的示例#2,但在我的JSFIDLE中,文本的颜色不会在红色和蓝色之间交替: 演示: 这不可能是因为我需要jQuery或者是因为标记,对吧?我把它抄了一遍 我还想问一下澄清的目的:var nIntervId的原因;在顶部定义为全局变量,以便它可以在changeColor()和stopTextColor()函数中使用,对吗 var nIntervId; //global variable function changeColor() {
var nIntervId; //global variable
function changeColor() {
nIntervId = setInterval(flashText, 500);
}
function flashText() {
var oElem = document.getElementById("my_box");
oElem.style.color = oElem.style.color == "red" ? "blue" : "red";
}
function stopTextColor() {
clearInterval(nIntervId);
}
换句话说,如果代码如下所示:
function changeColor() {
var nIntervId = setInterval(flashText, 500);
}
function flashText() {
var oElem = document.getElementById("my_box");
oElem.style.color = oElem.style.color == "red" ? "blue" : "red";
}
function stopTextColor() {
clearInterval(nIntervId); //undefined??
}
您的函数是在另一个函数中定义的(该函数是在
onLoad
中执行的)(根据左侧JSFIDLE选项中的第二个下拉菜单)
这意味着它们的作用域是该函数,而不是全局函数
因此,它们超出了onload=“stopTextColor();”
属性的范围
只需在现有的onload处理程序中调用
stopTextColor()
,而不是在使用onload
属性创建的另一个处理程序中调用即可。您的小提琴工作正常。只需将左侧的第二个下拉菜单(显示onLoad更改为No Wrap-in-Head选项)
您还应该查看链接,了解为什么昆汀回答了为什么您的代码不起作用,所以我将回答您的第二个问题;关于
nItervId
是gloabl变量的原因,您是正确的。它用于clearInterval()
-方法。