2016-09-06 4 views
1

タイマーの問題によりスタックしました。Ionic&AngularJS、タイムアウトがキャンセルされていません

簡単に、コードはフォームを送信し、投稿に対する回答はiFrameで開きます。 フォームのEventListenerを使用すると、「送信」を検出してタイマーを適用して、iFrameの読み込みが長すぎるかどうかを検出できます。 しかし、iFrameがロードされていても(=タイマをキャンセルする必要があります)、タイマーの関数が呼び出されます。私は何をしないのですIs there a way to clear all time outs?

[...] 
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とし、そのようにそれらのすべてをクリアしてみました:?ここ はコードがありますか ありがとうございます!

答えて

0

さて、タイマーがキャンセルされなかった理由がわかりました。

私はデバッグを試みましたが、フォームがサブミットされたときにalert()を設定して、サブプログラムがサブミットeventListenerに複数回入力していることが分かりました。 私はすべてのタイマーIDを捕まえてそれらを殺すつもりだが、私は最終的にあきらめて根本的な原因を見つけることに決めた。

問題は、私の見解では、.htmlページで複数回 'ng-controller = "MyCtrl"'と呼んでいました。だから、私はちょうど余分なものを削除し、プログラムが働いた!

希望すると助かります!

関連する問題