我因为计时器问题而陷入困境。
简单地说,代码提交一个表单,并在iFrame中打开帖子的答案。 表单上的EventListener允许我检测"提交"并应用计时器来检测iFrame加载是否太长。 但是,即使加载了iFrame(=应该取消定时器),也会调用定时器的功能。 这是代码:
[...]
var el = document.getElementById("myForm");
if(el){
el.addEventListener("submit", function(event){
$scope.popupOpened=false;
var iframeWindow = window.parent.document.getElementById('myIframe');
var iframeDoc = iframeWindow.contentWindow.document;
//7 seconds before the popup is shown up
$rootScope.myTimer = $timeout(function(){
window.frames[0].stop();
if(!$scope.popupOpened){
errorConnexion2();//popup opening
}
}, 7000);
iframeWindow.onload=function(){
console.log("iframe loaded");
//cancel the timer
$timeout.cancel($rootScope.myTimer);
}
});
}
[...]
我也试过了setTimeout和clearTimeout,并清除了所有这些:Is there a way to clear all time outs?
我错过了什么? 提前谢谢!
答案 0 :(得分:0)
好的,所以我找到了定时器未被取消的原因!
我尝试调试,在提交表单时设置alert(),并且它发现程序在提交的eventListener中多次输入。 我虽然要抓住所有计时器ID并杀死他们,但我最终决定放弃并找到根本原因。
问题出在我看来,在.html页面中我多次调用'ng-controller =“MyCtrl”'!所以,我刚刚删除了额外的那些,程序工作了!
希望它有所帮助!