【发布时间】:2016-10-09 04:59:57
【问题描述】:
我对 JavaScript 和一般编程非常陌生。我目前正在处理一些我正在玩的代码,我想知道是否有人可以给我一些建议。
背景:
我正在使用的代码相当简单;有一个时钟,当前时间在 setInterval 上运行,以秒为单位更新。
时钟下方有一个显示“停止”的按钮,按下时会清除间隔,然后按钮将显示“开始”。如果再次按下显示“开始”的按钮,它将在当前时间继续计时。所以基本上这个按钮会切换时钟的间隔,根据它的状态,按钮会显示“开始”或“停止”。
W3Schools: JS Timing 是我在创建我正在使用的代码时最初引用的位置。这是我学习 setInterval 和 clearInterval 如何工作的地方。我还使用了示例中的一些代码并对其进行了调整,这样我就可以尝试让时钟定时器打开和关闭。
代码:
var clock09 = window.setInterval(myTimer09, 1000);
function myTimer09() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("req09").innerHTML =
"<h1>" + t + "</h1>";
}
function toggle10() {
var button = document.getElementById("button10").innerHTML;
if (button == "Stop") {
window.clearInterval(clock09);
document.getElementById("button10").innerHTML = "Start";
} else {
clock09 = window.setInterval(myTimer09, 1000);
document.getElementById("button10").innerHTML = "Stop";
}
}
<span class="center" id="req09"></span>
<button type="button" id="button10" onclick="toggle10()" class="button">Stop</button>
https://jsfiddle.net/dtc84d78/
问题:
所以我的代码问题是按钮从“停止”按钮切换到“开始”按钮,但 clearInterval 不适用于具有 setInterval 的变量。
我在 SO,such as this one 中搜索了类似的问题,我听从了他们的建议,但仍然一无所获。经过数小时的尝试,我决定直接从 W3Schools 复制并粘贴一些示例到 jsFiddle,这甚至不起作用(包含在 jsfiddle 链接中)?
我真的快疯了,为什么 clearInterval() 的任何东西都不适用于我?可能是我的电脑、浏览器或其他任何东西?我来 SO 作为我的最后一个资源,所以如果有人能给我一些关于这个问题的指导,我将以你的名字命名我的第一个孩子。
提前谢谢你。
额外信息: 我目前在 Mac 桌面上工作,使用 Komodo 编写代码,我正在使用 Google Chrome 预览代码。
更新:
我在 cmets 中提到了这一点,但代码是在一个外部 .js 文件中。然后将 .js 文件链接在 head 标记之间,并且就在 end body 标记之前。
<head>
<meta charset="utf-8" />
<title>Program</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/program-05.css">
<script type="text/javascript" src="scripts/program-05.js">
/* <![CDATA[ */
/* ]]> */
</script>
</head>
<body onload="checkCookies(); setTimeout(function() { func11() }, 5000);">
. . . code for stuff
. . . code for clock timer
. . . code for other stuff
<script type="text/javascript" src="scripts/program-05.js">
/* <![CDATA[ */
/* ]]> */
</script>
</body>
@Matz 提到将时钟计时器 js 代码粘贴在 head 部分之后,代码运行良好!这是到目前为止在头部的样子。
<head>
<meta charset="utf-8" />
<title>Program</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/program-05.css">
<script type="text/javascript" src="scripts/program-05.js">
/* <![CDATA[ */
/* ]]> */
</script>
<script>
///*
var clock09 = window.setInterval(myTimer09, 1000);
function myTimer09() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("req09").innerHTML =
"<h1>" + t + "</h1>";
}
function toggle10() {
var button = document.getElementById("button10").innerHTML;
if (button == "Stop") {
window.clearInterval(clock09);
document.getElementById("button10").innerHTML = "Start";
} else {
clock09 = window.setInterval(myTimer09, 1000);
document.getElementById("button10").innerHTML = "Stop";
}
}
//*/
</script>
</head>
虽然这很好用,但我现在想弄清楚为什么时钟计时器 js 代码直接位于 head 部分而不是将其保存在外部 .js 文件中(外部文件链接在医生)?我该怎么做才能使它在外部文件中工作?
【问题讨论】:
-
您只需将
function toggle10() {更改为document.toggle10 = function() {即可修复您的小提琴 -
我刚刚意识到代码在 SO sn-p 中有效!不幸的是,我正在使用的代码需要位于我正在处理的 index.html 文件中,这也是我无法使用此代码获得我想要的结果的地方。我目前正在尝试查看给出的任何建议是否可以解决问题。注意:所有 javascript 都在一个外部文件 .js 文件中,该文件链接在 HEAD 和 BODY 标记之前。我也没有任何控制台错误。
-
到目前为止,在所有建议中,将这个问题的 javascript 代码放在 head 标签之间对我有用!现在我的外部 .js 文件被链接,后跟时钟计时器的 js 代码。
-
看来这篇文章越来越大了,你原来的js不被称为内联的问题已经解决了不是吗?至于外部JS文件的问题,那就另当别论了,可以考虑单独贴出来。
-
我想我会继续并在 HTML 文件中发布。在发布其他任何内容之前,我将在谷歌上搜索更多关于外部 JS 文件问题的信息。谢谢大家的建议!
标签: javascript html setinterval jsfiddle clearinterval