我卡住了,因为计时器问题。
简单地说,代码提交一个表单,并在iFrame中打开文章的答案。表单上的EventListener允许我检测"提交",并应用计时器来检测iFrame加载是否太长。但是,即使iFrame被加载(=timer应该被取消),计时器的函数也会被调用。下面是代码:
[...]
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和clearartimeout,并通过清除所有这样的:是否有一种方法来清除所有超时?
我错过了什么?
好了,我找到了定时器没有被取消的原因了!
我尝试调试,在提交表单时设置alert(),它发现程序在提交eventListener中多次进入。我想抓住所有定时器id并杀死它们,但我最终决定放弃并找到根本原因。
问题是在我看来,在。html页面我多次调用'ng-controller="MyCtrl" !所以,我只是删除了多余的,程序工作了!