单击时 clearInterval 不起作用
clearInterval not working when clicked
Clearinterval 不是清除间隔集。该程序卡在循环中等待单击。如何在检测到点击后清除间隔?
var timerID;
function waitForClick() {
timerID = setInterval(listen(), 1000);
}
function listen() {
document.getElementById("graphic").onclick = function stopListen() {
alert("clicky");
clearInterval(timerID);
}
};
waitForClick();
return;
其实就是清空区间。我相信问题在于您的逻辑以及您期望发生的事情。让我们稍微分解一下您的代码:
var timerID;
function waitForClick() {
timerID = setInterval(listen(), 1000);
}
您在这里创建了一个间隔。但是,您的间隔实际上是 listen
的 return 值,因此您实际上是在这样做:
timerID = setInterval(undefined, 1000);
调用 setInterval 时,它会调用 listen
(因为 ()
),这会将您的 onclick
处理程序绑定到 graphic
元素。这只会绑定一次,否则您会看到多条 alert
消息。当用户随后单击 graphic
元素时,您正在提醒 "clicky",然后清除您的间隔。
问题似乎是您再次单击该元素并看到警报,并假设间隔仍然是 运行。不是 - 您只有一个仍然绑定的事件处理程序!
如果你这样做:
document.getElementById("graphic").onclick = function stopListen() {
alert('clicky');
clearInterval(timerID);
// Clear out event handler
document.getElementById('graphic').onclick = null;
}
您会看到警报停止(因为我们已明确将 onclick 设置为 null)。
Fiddle: http://jsfiddle.net/k2muguog/
我相信你想做的是这样的:
function waitForClick() {
if (!timerId) {
timerId = setInterval(toInterval, 1000);
document.getElementById('graphic').onclick = function() {
alert('clicky');
clearInterval(timerId);
timerId = null;
}
}
}
function toInterval() {
// Logic here - BUT NOT THE CLICK HANDLER
document.getElementById('output').innerHTML = Date.now();
}
http://jsfiddle.net/k2muguog/1/
点击应该提醒然后停止间隔。
Clearinterval 不是清除间隔集。该程序卡在循环中等待单击。如何在检测到点击后清除间隔?
var timerID;
function waitForClick() {
timerID = setInterval(listen(), 1000);
}
function listen() {
document.getElementById("graphic").onclick = function stopListen() {
alert("clicky");
clearInterval(timerID);
}
};
waitForClick();
return;
其实就是清空区间。我相信问题在于您的逻辑以及您期望发生的事情。让我们稍微分解一下您的代码:
var timerID;
function waitForClick() {
timerID = setInterval(listen(), 1000);
}
您在这里创建了一个间隔。但是,您的间隔实际上是 listen
的 return 值,因此您实际上是在这样做:
timerID = setInterval(undefined, 1000);
调用 setInterval 时,它会调用 listen
(因为 ()
),这会将您的 onclick
处理程序绑定到 graphic
元素。这只会绑定一次,否则您会看到多条 alert
消息。当用户随后单击 graphic
元素时,您正在提醒 "clicky",然后清除您的间隔。
问题似乎是您再次单击该元素并看到警报,并假设间隔仍然是 运行。不是 - 您只有一个仍然绑定的事件处理程序!
如果你这样做:
document.getElementById("graphic").onclick = function stopListen() {
alert('clicky');
clearInterval(timerID);
// Clear out event handler
document.getElementById('graphic').onclick = null;
}
您会看到警报停止(因为我们已明确将 onclick 设置为 null)。
Fiddle: http://jsfiddle.net/k2muguog/
我相信你想做的是这样的:
function waitForClick() {
if (!timerId) {
timerId = setInterval(toInterval, 1000);
document.getElementById('graphic').onclick = function() {
alert('clicky');
clearInterval(timerId);
timerId = null;
}
}
}
function toInterval() {
// Logic here - BUT NOT THE CLICK HANDLER
document.getElementById('output').innerHTML = Date.now();
}
http://jsfiddle.net/k2muguog/1/
点击应该提醒然后停止间隔。