Ionic& AngularJS,超时未取消

时间:2016-09-06 19:36:13

标签: javascript angularjs iframe timer timeout

我因为计时器问题而陷入困境。

简单地说,代码提交一个表单,并在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?

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

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了定时器未被取消的原因!

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

问题出在我看来,在.html页面中我多次调用'ng-controller =“MyCtrl”'!所以,我刚刚删除了额外的那些,程序工作了!

希望它有所帮助!