2017-10-09 70 views
0

我有一個function當某些條件得到滿足,處理點擊。連續執行功能?

場景:

我想,當點擊登錄按鈕只有在滿足特定條件時自動關閉模式。那個條件在$scope.empSignin()之內。

所以我根據谷歌的一些消息,我創建了一個function,當條件有效時將處理click事件。

HTML

//$scope.closeModal function 
<button id="closeModal" type="button" class="close" data-dismiss="modal" ng-click="closeModal()">&times;</button> 

//$scope.empSignin function 
<input type="button" value="Sign In" ng-click="empSignin(signinInfo)"> 

這是html文件,其中包含一個button是在js function自動點擊。

file.js

$scope.closeModal = function(){ 
    console.log('entered'); 
    $timeout(function(){ 
     var el = document.getElementById('closeModal'); 
     angular.element(el).trigger('click'); 
    }, 0); 
} 

$scope.empSignin = function(signinInfo){ 
    var data = { 
     username : signinInfo.username, 
     password : signinInfo.password 
    } 
    $http.post('server/emp_signin.php', data).then(function(res){ 
     window.alert(res.data.message); 
     $scope.isMessage = res.data.message; 
     if($scope.isMessage == 'Successfully Signed In'){ 
      console.log('true'); 
      $scope.closeModal(); 
     } else { console.log('false'); } 

    }); 
} 

js file包含function,處理click事件。

據工作如我所料,但是當該事件發生了,在瀏覽器中console有連續執行(爲我所知道的)。

我的問題是發生了什麼事那裏,這是爲什麼?我如何解決這個問題,因爲當我在taskmanager中查看時,它會佔用大量設備資源。

這裏是控制檯的截圖:

browsers console image

+0

這不是如何角的作品。您不會在Angular中通過ID選擇元素。此外,爲什麼要選擇一個元素,然後模擬點擊它,而不是簡單地調用'closeModal()'函數? –

+0

因爲你寫的setTimeout零代碼,這就是爲什麼 – Jinesh

+0

@Jinesh,setTimeout的將只添加在執行的延遲,也不會設置要執行的代碼超過一次。 –

回答

0

它,因爲你正在呼籲<button>的單擊事件,並在功能closeModal功能,您將再次觸發click事件,並再次呼籲closeModal功能,因此它進入無限loop.And所以你看到entered文本控制檯這麼多次。這是問題。

angular.element(el).trigger('click'); // This is putting your code in infinite execution. 

因此,刪除上述行,將不會繼續執行您的代碼。

+0

感謝您的回答,但無法正常工作。 我更新了我的問題添加了另一個相關的'功能'。 – Marksmanship

+0

@Marksmanship,您添加的新功能不會從任何地方調用,也不會與任何標籤鏈接。 –

+0

對不起,我已經更新了'html'部分。請參見。 – Marksmanship