[英]ClearInterval() does not work on existing interval
我为一个学校项目编写了以下函数,但是clearinterval()
无法正常工作。 我已经看过几个关于同一问题的问题,而且大多数时候都是范围问题。
但是,我认为我的函数使用了一个全局变量,该变量应该起作用。 没有,我也不知道为什么。 请赐教。
HTML(实际上是具有相似行的表的一部分)
<tr id="row35" data-uitval="1" class="">
<td>
<button type="button" id="knopje" class="tabeluur" data-uur="35" onclick="check(this)">
<p>✕</p>
</button>
</td>
<td> other cells... </td>
</tr>
代码(JavaScript,在<head>
-tag中)
var fadingFunc;
var busy = false;
function check(uurID) {
if(busy) {
$('#foutmelding').html('Uw vorige bewerking loopt nog. Wacht totdat deze is afgelopen.')
} else {
uitval(uurID);
};
};
function uitval(uurID) {
// makes the button child (<p>) fade out and back in continuously
fadingFunc = window.setInterval(fadeBlink(uurID), 2000);
$.post(
'AnswerMe.php',
{
// send stuff
},
function(data) {
if(data === 'succes: uitval toegevoegd') {
window.clearInterval(fadingFunc);
// do stuff
} else if(data === 'succes: uitval verwijderd') {
window.clearInterval(fadingFunc);
// do stuff
} else {
window.clearInterval(fadingFunc);
// do stuff
};
}
);
};
注意1:由于该问题与该问题无关,因此我剥离了所有实际执行操作的代码。
注意2:我在计算机(本地主机,谷歌fadingFunc
器)上对此进行了测试,并且fadingFunc
确实在全局范围内保存了一个值(通过控制台在开发人员模式下进行了测试)
因此,如果我知道了-您希望按钮内的X闪烁,而发布请求正在等待响应。
您的代码几乎在那里,但是您没有正确使用setInterval
,并且选择了一种较差的方法来实现这一目标。 首先,我们将修复您的代码,然后使用CSS动画检验我的方法。
要修复您的代码:
<head>
标记内。 window.
不需要-使用setInterval(
而不是window.setInterval
。 setInterval(function(){ fadeBlink(uurID); }, 2000)
看到它的工作原理: JSFIDDLE
我认为对您来说更好的第二种方法是在请求之前添加一个类,并在完成后将其删除。 全班都会动画。
第二种方法: JSFIDDLE
第二个代码:
JS
var busy = false;
function check(uurID) {
if(busy) $('#foutmelding').html('Uw vorige bewerking loopt nog.');
else uitval(uurID);
}
function uitval(uurID) {
$(uurID).addClass('blink');
busy = true;
$.post('http://fiddle.jshell.net/_display/',
{ test:'test' },
function() {
$(uurID).removeClass('blink');
busy = false;
}
);
}
CSS
.blink p {
-webkit-animation-name: blinker;
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: blinker;
-moz-animation-duration: 1s;
-moz-animation-timing-function: linear;
-moz-animation-iteration-count: infinite;
animation-name: blinker;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
@-moz-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
@-webkit-keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
@keyframes blinker {
0% { opacity: 1.0; }
50% { opacity: 0.0; }
100% { opacity: 1.0; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.