我对javascript很陌生,我正在尝试做一些我认为非常基本的事情。
我创建了一个倒数计时器,并使用"i"作为我的变量来保存 0-5 之间的数字。我有一个从 d[0] 到 d[5] 的"d"数组,其中包含字符串。
我正在尝试使计时器倒计时将"i"值传递到 innerHTML 方法数组值中,所以我希望它显示 d[5]...d[4]...d[3]...等。
我做错了什么!?请帮忙!
<html><head><script language="javascript" type="text/javascript">
var d=new Array():
d[1]="One";
d[2]="Two";
d[3]="Three";
d[4]="Four";
d[5]="Five";
var i=5;
var i=setInterval("timer()",2000); //1000 will run it every 1 second
function timer() {
i--;
if (i <= 0)
clearInterval(countD);
return;
}
}
document.getElementById(timer).innerHTML = d[i];
</script>
</head>
<body>
<h1>
<p id="timer"></p>
</h1>
</body>
</html>
另外,document.getElementById(timer).innerHTML = d[i];
应该document.getElementById("timer").innerHTML = d[i];
ID 名称周围需要有引号,因为它们不是变量的名称。变量"计时器"未定义。
此外,您在行if (i <= 0)
上缺少一个大括号。我假设你的意思是退出函数,如果这个 if 语句为真。
此外,您在行var d=new Array():
上有一个冒号而不是分号
此外,您不能在 h1 中具有段落标签
另外,您应该将所有这些JavaScript封装到一个名为init
的函数中。我相信头部的javascript代码在加载html之前运行。因此,javascript 找不到
标签。然后,使用<body onload="init()">
作为您的身体标签。
编辑:正如评论者所说,您正在使用变量i来处理多个不相关的事情。
抱歉,但你的代码很混乱;这里有一种方法可以让你的代码工作,以及一个工作示例:
<html>
<head>
<script language="javascript" type="text/javascript">
var d=new Array();
d[0]="One";
d[1]="Two";
d[2]="Three";
d[3]="Four";
d[4]="Five";
var i=4;
var myTimer =setInterval(timer,2000); //1000 will run it every 1 second
function timer() {
document.getElementById("timer").innerHTML = d[i];
i--;
if (i < 0){
clearInterval(myTimer);
}
}
</script>
</head>
<body>
<h1>
<p id="timer"></p>
</h1>
</body>
</html>
你的JavaScript的问题
- 您有两个
i
声明,一个接一个 - 一个设置为5
,另一个设置为setInterval
计时器 clearInterval(countD);
countD
是什么?-
document.getElementById(timer).innerHTML = d[i];
尝试使用函数timer
作为参数来getElementById
。它应该用引号引起来:document.getElementById("timer").innerHTML = d[i];
- 它也只被调用一次,因为它不在计时器调用的函数内。
-
var d=new Array():
应以;
(分号)而不是:
(冒号)结尾 - 你有不匹配的大括号 - 你的
if
语句没有左大括号({
),但它有一个右大括号。 - 请注意,虽然
setInterval("timer()", 1000)
是有效的 JavaScript,但它取决于eval
如果可能的话应该避免哪些。使用它的替代首选方法是setInterval(timer, 1000)
即传递函数而不是字符串。