我的clearInterval有问题,它没有停止我的setInterval,这里是代码:
$(".auto-check").click(function(){
if($('input[name=autorefresh]').is(':checked') == true){
var intervalId = setInterval(load,4000);
}
else{
alert("Auto Refresh is off");
clearInterval(intervalId);
}
});
谁能说出来,问题在哪里?
答案 0 :(得分:3)
仅仅为了论证,使用jQuery .data()
的替代方法$(".auto-check").click(function(){
var elem = $('input[name=autorefresh]'
if(elem.is(':checked')){
elem.data("interval-id", setInterval(load,4000));
}
else{
alert("Auto Refresh is off");
clearInterval(elem.data("interval-id"));
elem.removeData("interval-id");
}
});
答案 1 :(得分:1)
你需要保持intervalId。在您的情况下,您在本地声明它,并在函数后丢失它。在函数外部声明它,在里面定义它,然后它将是有效的。
var intervalId;
$(".auto-check").click(function(){
if($('input[name=autorefresh]').is(':checked') == true){
intervalId = setInterval(load,4000);
}
else{
alert("Auto Refresh is off");
clearInterval(intervalId);
}
});
答案 2 :(得分:0)
试试这个:
var intervalId = null;
$('.auto-check').click(function(){
if($('input[name=autorefresh]').is(':checked') == true) {
intervalId = setInterval(load,4000);
} else {
alert('Auto Refresh is off');
clearInterval(intervalId);
}
});
答案 3 :(得分:0)
正如其他人所说,你需要你的interval对象的范围大于它所包含的函数的范围,因为下次你单击元素时,将创建一个新的回调函数一个全新的范围;每次点击你的间隔都是一个全新的对象。
编辑:虽然是长视频,但这里是对范围链和执行上下文的详细解释,详细说明了执行函数时会发生什么。解释开始大约5分钟:http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html
答案 4 :(得分:0)
这是怎么回事?
$(".auto-check").click(function(){
if($('input[name=autorefresh]').is(':checked') == true){
window.intervalId = setInterval(load,4000);
}
else{
alert("Auto Refresh is off");
clearInterval(window.intervalId);
}
});