当我尝试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) };
}
}
答案 0 :(得分:3)
那是因为你在函数内部声明了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);
答案 1 :(得分:1)
timeOut
是autoSlides
的本地变量。
autoSlides
有一个if语句,所以它会:
timeOut
timeOut
清除超时由于它从不同时执行这两项操作,因此timeOut
的值在第二种情况下始终为undefined
。
如果您希望在多次调用autoSlides
函数时重复使用该变量,则需要将其声明为在之外,而不是在autoSlides
内。
答案 2 :(得分:0)
您可以将“超时”分配给功能范围之外。如果您使用客户端javascript:
,一种选择是将其附加到全局“窗口”对象window.timeOut = setTimeout(function () { autoSlides(1) }, 4000);
clearTimeout(window.timeOut);