Javascript 爱奥尼亚公司;AngularJS,超时未取消

Javascript 爱奥尼亚公司;AngularJS,超时未取消,javascript,angularjs,iframe,timer,timeout,Javascript,Angularjs,Iframe,Timer,Timeout,因为计时器的问题,我被卡住了 简单地说,代码提交一个表单,然后在iFrame中打开帖子的答案。 表单上的EventListener允许我检测“提交”并应用计时器来检测iFrame加载是否过长。 但是,即使加载了iFrame(=应该取消计时器),也会调用计时器的函数。 代码如下: [...] var el = document.getElementById("myForm"); if(el){ el.addEventListener("submit", function(event){ $

因为计时器的问题,我被卡住了

简单地说,代码提交一个表单,然后在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,并将它们全部清除如下:

我错过了什么?
提前谢谢你

好吧,我找到了计时器没有取消的原因

我尝试调试,在提交表单时设置alert(),它发现程序在submit eventListener中多次输入。 我曾想过抓住所有的定时器ID并杀死它们,但我最终决定放弃并找到根本原因

问题出现在我的视图中,在.html页面中,我多次调用“ng controller=“MyCtrl”!所以,我只是删除了额外的一个和程序工作


希望有帮助

好吧,我找到了计时器没有取消的原因

我尝试调试,在提交表单时设置alert(),它发现程序在submit eventListener中多次输入。 我曾想过抓住所有的定时器ID并杀死它们,但我最终决定放弃并找到根本原因

问题出现在我的视图中,在.html页面中,我多次调用“ng controller=“MyCtrl”!所以,我只是删除了额外的一个和程序工作

希望有帮助