Javascript clearTimeout() 不工作
Javascript clearTimeout() not working
当我尝试 clearTimeout() 时,超时只是继续。
代码:
function autoSlides(x) {
var timeOut;
if (x == 1) {
plusSlides(1);
document.getElementById("switch").onclick = function () { autoSlides(2) };
timeOut = setTimeout(function () { autoSlides(1) }, 4000);
} else if (x == 2) {
clearTimeout(timeOut);
document.getElementById("switch").onclick = function () { autoSlides(1) };
}
}
timeOut
是 autoSlides
的局部变量。
autoSlides
有一个 if 语句,所以它会:
- 给
timeOut
赋值
- 尝试使用
timeOut
清除超时
由于它永远不会同时执行这两项操作,因此在第二种情况下 timeOut
的值将始终为 undefined
。
如果您想在多次调用 autoSlides
函数时重复使用该变量,则需要在 外部 而不是 autoSlides
内部声明它。
那是因为您在函数内部声明 timeOut
。这意味着您没有使用您之前认为保存的相同值。
function autoSlides(x) {
var timeOut; // Initialized to `undefined`
if (x === 1) {
timeOut = setTimeout(function() {
console.log('Look, the timeout finished');
}, 1000);
} else if (x === 2) {
// Remember: this is a new timeout variable
// So this really means `clearTimeout(undefined)`
clearTimeout(timeOut);
}
}
autoSlides(1);
autoSlides(2);
您需要做的是将超时 ID 保存在函数之外的某个地方。
var timeOut; // Won't be reset every time the function is called
function autoSlides(x) {
if (x === 1) {
timeOut = setTimeout(function() {
console.log('Look, the timeout never finishes');
}, 1000);
} else if (x === 2) {
// The value was saved last time
clearTimeout(timeOut);
console.log('cleared the timeout');
}
}
autoSlides(1);
autoSlides(2);
您可以将 "timeout" 分配给函数范围之外。一种选择是将它附加到全局 "window" 对象,如果您使用客户端 javascript:
window.timeOut = setTimeout(function () { autoSlides(1) }, 4000);
clearTimeout(window.timeOut);
当我尝试 clearTimeout() 时,超时只是继续。 代码:
function autoSlides(x) {
var timeOut;
if (x == 1) {
plusSlides(1);
document.getElementById("switch").onclick = function () { autoSlides(2) };
timeOut = setTimeout(function () { autoSlides(1) }, 4000);
} else if (x == 2) {
clearTimeout(timeOut);
document.getElementById("switch").onclick = function () { autoSlides(1) };
}
}
timeOut
是 autoSlides
的局部变量。
autoSlides
有一个 if 语句,所以它会:
- 给
timeOut
赋值 - 尝试使用
timeOut
清除超时
由于它永远不会同时执行这两项操作,因此在第二种情况下 timeOut
的值将始终为 undefined
。
如果您想在多次调用 autoSlides
函数时重复使用该变量,则需要在 外部 而不是 autoSlides
内部声明它。
那是因为您在函数内部声明 timeOut
。这意味着您没有使用您之前认为保存的相同值。
function autoSlides(x) {
var timeOut; // Initialized to `undefined`
if (x === 1) {
timeOut = setTimeout(function() {
console.log('Look, the timeout finished');
}, 1000);
} else if (x === 2) {
// Remember: this is a new timeout variable
// So this really means `clearTimeout(undefined)`
clearTimeout(timeOut);
}
}
autoSlides(1);
autoSlides(2);
您需要做的是将超时 ID 保存在函数之外的某个地方。
var timeOut; // Won't be reset every time the function is called
function autoSlides(x) {
if (x === 1) {
timeOut = setTimeout(function() {
console.log('Look, the timeout never finishes');
}, 1000);
} else if (x === 2) {
// The value was saved last time
clearTimeout(timeOut);
console.log('cleared the timeout');
}
}
autoSlides(1);
autoSlides(2);
您可以将 "timeout" 分配给函数范围之外。一种选择是将它附加到全局 "window" 对象,如果您使用客户端 javascript:
window.timeOut = setTimeout(function () { autoSlides(1) }, 4000);
clearTimeout(window.timeOut);