0

我复制了关于 setInterval() 的 Mozilla 文档中给出的示例 #2 ( https://developer.mozilla.org/en-US/docs/Web/API/window.setInterval?redirectlocale=en-US&redirectslug=DOM%2Fwindow。 setInterval#Example_1.3A_Generic),但在我的 JSFiddle 中,文本的颜色不会在红色和蓝色之间交替:

演示:http: //jsfiddle.net/lpsternotes/JHpt9/

不可能是因为我需要 jQuery 或因为标记,对吧?我把它完全复制了一遍。

我还想要求澄清:原因 var nIntervId; 被定义为顶部的全局变量,这样它就可以在 changeColor() 和 stopTextColor() 函数中使用,对吧?

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??
}
4

2 回答 2

1

你的小提琴工作正常。只需将左侧显示onLoad的第二个下拉菜单更改为No Wrap - in Head选项。

您还应该查看链接以了解WHY

于 2013-09-29T16:38:28.483 回答
1

您的函数在另一个函数(已执行onLoad)中定义(根据左侧 JSFiddle 选项中的第二个下拉菜单)。

这意味着它们的范围仅限于该函数,而不是全局变量。

因此,它们超出了您的onload="stopTextColor();"属性的范围。

只需调用现有的 onload 处理程序,而不是使用该属性stopTextColor()创建的另一个处理程序。onload

于 2013-09-29T16:24:45.707 回答