- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此程序中,我收到一个日期和时间,并从当前时间和日期开始计算每秒,并在达到用户日期和时间后显示“我们已到达”。
但问题是,一旦达到该时间,即使我清除了间隔,该函数仍然保持执行。
我发现了许多具有相同标题的问题,但似乎没有一个能解决我的问题。
function incrementCount() {
var time = document.getElementById("time").value;
var date = document.getElementById("date").value;
document.getElementById("target").innerText = "Target " + date.toString() + " " + time.toString();
var time = time.split(":");
var date = date.split("-");
var sec_t = time[2];
var min_t = time[1];
var hour_t = time[0];
var day_t = date[2];
var month_t = date[1];
var year_t = date[0];
var add = setInterval(
function() {
var today = new Date();
var sec_c = today.getSeconds();
var min_c = today.getMinutes();
var hour_c = today.getHours();
var day_c = today.getDate();
var month_c = today.getMonth() + 1;
var year_c = today.getFullYear();
var display_str = "";
//if(parseInt(year)==parseInt(year_t) && parseInt(month)==parseInt(month_t) && parseInt(day)==parseInt(day_t) && parseInt(hour) == parseInt(hour_t) && parseInt(min_t) == parseInt(time[1]) && parseInt(sec_t) == parseInt(time[2]))
if (parseInt(year_t) == parseInt(year_c) &&
parseInt(month_t) == parseInt(month_c) &&
parseInt(day_t) == parseInt(day_c) &&
parseInt(hour_t) == parseInt(hour_c) &&
parseInt(min_t) == parseInt(min_c) &&
parseInt(sec_t) == parseInt(sec_c)) {
document.getElementById("current").innerText = "We Reached There";
clearInterval(add);
} else {
display_str = year_c.toString() + "-" + month_c.toString() + "-" + day_c.toString() + " " + hour_c.toString() + ":" + min_c.toString() + ":" + sec_c.toString();
document.getElementById("current").innerText = "Current " + display_str
}
}, 1000);
}
<img src="https://media.giphy.com/media/2vq8w7WI0oMBuDQULT/giphy.gif">
<br><br>
<form>
<label>Date</label>
<input type="Date" id="date">
<br><br>
<label>Time</label>
<input type="time" id="time" value="16:50:30">
</form>
<br><br>
<input type="Submit" onclick="incrementCount()">
<br><br>
<span id="target">Please select time</span>
<br><br>
<span id="current"></span>
最佳答案
有两个潜在的问题,setInterval( ... ,1000)
会尝试每 1000
毫秒调用一次回调函数,但延迟可能会更大,所以你可能会错过一秒钟。
但这并不能解释你的评论:
When I run the problem, once the given time is reached, I'm able to see "We reached there" and in theory, it should stop (ie no more counting). But counting still continues. Could you please run the code?
只有当您使用不同的输入字段值单击提交
两次时,才会发生这种情况。因为如果您点击Submit
,则会创建一个附加的Interval,但当前正在运行的Interval不会被清除,因为add
在incrementCount<的范围内
.
因此,如果您点击提交
广告,意识到到达时间已经过去或无效,并且您更新了输入值并再次点击提交
,那么你至少有一个不会再停止计数的间隔。
要解决这个问题,您需要将 add
移出 incrementCount
的范围,并在创建新间隔之前调用 clearInterval(add)
。我将代码移动到 IIFE 中,以便 add
不会污染全局范围,并使用 addEventListener
。
(function() {
var add
document.getElementById('submit').addEventListener('click', function() {
incrementCount()
}, false)
function incrementCount() {
// clear old interval
clearInterval(add)
var time = document.getElementById("time").value;
var date = document.getElementById("date").value;
document.getElementById("target").innerText = "Target " + date.toString() + " " + time.toString();
var time = time.split(":");
var date = date.split("-");
var sec_t = time[2];
var min_t = time[1];
var hour_t = time[0];
var day_t = date[2];
var month_t = date[1];
var year_t = date[0];
add = setInterval(
function() {
var today = new Date();
var sec_c = today.getSeconds();
var min_c = today.getMinutes();
var hour_c = today.getHours();
var day_c = today.getDate();
var month_c = today.getMonth() + 1;
var year_c = today.getFullYear();
var display_str = "";
//if(parseInt(year)==parseInt(year_t) && parseInt(month)==parseInt(month_t) && parseInt(day)==parseInt(day_t) && parseInt(hour) == parseInt(hour_t) && parseInt(min_t) == parseInt(time[1]) && parseInt(sec_t) == parseInt(time[2]))
if (parseInt(year_t) == parseInt(year_c) &&
parseInt(month_t) == parseInt(month_c) &&
parseInt(day_t) == parseInt(day_c) &&
parseInt(hour_t) == parseInt(hour_c) &&
parseInt(min_t) == parseInt(min_c) &&
parseInt(sec_t) == parseInt(sec_c)) {
document.getElementById("current").innerText = "We Reached There";
clearInterval(add);
} else {
display_str = year_c.toString() + "-" + month_c.toString() + "-" + day_c.toString() + " " + hour_c.toString() + ":" + min_c.toString() + ":" + sec_c.toString();
document.getElementById("current").innerText = "Current " + display_str
}
}, 1000);
}
})()
<img src="https://media.giphy.com/media/2vq8w7WI0oMBuDQULT/giphy.gif">
<br><br>
<form>
<label>Date</label>
<input type="Date" id="date">
<br><br>
<label>Time</label>
<input type="time" id="time" value="16:50:30">
</form>
<br><br>
<input type="Submit" id="submit">
<br><br>
<span id="target">Please select time</span>
<br><br>
<span id="current"></span>
关于JavaScript:clearInterval();不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326558/
哇,这是我的第一篇文章!编程和编码的新手,这是我从事的第一个项目。我希望能够使用 setInterval() 来切换开关以运行代码或停止它。但是现在我无法在选择切换开关时将其关闭。尝试了多种方法,比如
Javascript 具有用于处理异步函数调用的 setInterval 和 clearInterval 函数。 clearInterval(handle) 和 window.clearInterva
我写了一个小函数,像这样每 5 秒移动/弹出一个按钮: HTML: Text JS: var interval; function buttonShake(){ var times = 5;
当我尝试将 clearInterval 绑定(bind)到按钮单击时,我无法正常工作。此外,显然该功能正在自行启动......这是我的代码 var funky = setInterval(functi
我正在创建一个倒数计时器,我需要从不同的函数调用 clearInterval,因为我想用两个不同的按钮开始和暂停倒计时 这是我的一段代码 const startCountdown = () => {
我正在尝试创建一个 slider ,其中的幻灯片或来自ajax。将鼠标悬停在 slider div 上会停止 slider 。为此,我创建了一个函数 sliderPopulateBlocks() ,它
我做了一个演示which is here 。您所要做的就是开始在文本字段中输入内容,确保控制台已打开。因此,当您键入时,您会立即看到 OMG Saved,并且控制台中的计数器会变得疯狂。 现在单击按钮
这是我的代码,它每秒根据变量自动添加一定数量的“点”或金币,但是当该变量发生变化时,这是通过运行此命令来停止设置的间隔的按钮不起作用的。请帮我解决这个问题。 function addMiner() {
我最近尝试每两秒重复一次 jQuery AJAX 请求。请注意:我已经查看了有关 SO 的其他问题,但其中似乎不适用于我的情况,我还查看了文档。 片段: else if (text == "load"
仍在掌握 javascript 的窍门,但不确定如何做到这一点.. 我使用间隔在页面上发送错误和成功消息,但遇到了一些问题。 假设我有以下内容: function setMyInterval(elem
var intervalHandles = []; function instanceLoopTimer(url,instance, time, id) { if (id in intervalHan
所以我尝试使用 JavaScript 编写一个计时器。加载页面时一切都很好,唯一的问题是当我多次重置计时器或使用应用按钮更改其持续时间(请参阅代码以查看这些按钮)而不是按预期运行时,旧实例计时器继续运
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我试图在像这样向下滚动的同时使用 headless-chrome/puppeteer 抓取一些链接: let interval const linkScraper = async () => {
在此程序中,我收到一个日期和时间,并从当前时间和日期开始计算每秒,并在达到用户日期和时间后显示“我们已到达”。 但问题是,一旦达到该时间,即使我清除了间隔,该函数仍然保持执行。 我发现了许多具有相同标
我正在开发游戏。我有带电池的板。单击“开始”后,3秒后,第一个单元格亮起,然后是下一个和下一个......但是,我希望板上只点亮一个单元格。这是我的代码: let intervalId; const
我有这个小脚本,可以通过淡入/淡出效果更改背景图像: /*controla la velocidad de la animación*/ var slideshowSpeed = 1000;
我无法为我的函数运行 clearInterval。我使用它们通过触发 setInterval 和触发 scrollLeft 的函数来滚动窗口。代码: function scrollSpan() {
在给定的代码中,我正在使用 setInterval() 和 clearInterval() 方法。这里有两个用于 setInterval() 的按钮和两个用于 clearInterval() 的按钮,
我正在寻找一种方法来停止我的脚本进程。这是一个有 16 张图片的脚本,每五秒随机选择一张图片。如果您选择了该图片(通过下面的提交按钮),则随机图片“选择器”需要停止。 一切正常,我找不到如何让 set
我是一名优秀的程序员,十分优秀!