2014-09-26 82 views
1

Hy 我有一個模擬輸入文件按鈕的div。 要做到這一點我做

angular.element('#fileInput').trigger('click'); 

但這產生正在進行中的錯誤已經應用,圍繞谷歌上搜索,我發現,這可能很容易避免將代碼超時內。

timeOut = $timeout(function(){ 
     angular.element('#fileInput').trigger('click'); 
    }); 

而作爲真正解決了這個問題,但$超時產生無限循環無限打開文件對話框,如果我的彈出塊被禁用的效果。在AngularJS文檔中,您可以清楚地看到$ timeout是setTimeout的一個包裝,它應該只生成一個對回調函數的調用,那麼爲什麼它會生成一個無限循環? 然而,試圖解決situtation我決定殺了第一個電話後,計時器,但我無法管理,

timeOut = $timeout(function(){ 
    angular.element('#fileInput').trigger('click'); 
}); 
timeOut.then(function(){$timeout.cancel(timeOut); 
    } 
); 

,我十分陷在這種情況下...我我只是錯過了明顯的東西?有人有任何想法?謝謝你的

+0

您確定觸發點擊不會以某種方式調用相同的代碼嗎?另外,你可以提供一個jsFiddle或其他東西,因爲我不確定我看到這種行爲是如何發生的 – Ian 2014-09-26 15:03:27

+0

不確定我是否理解你的問題,但是,當我觸發點擊打開的文件對話框,如果他按下保存然後上傳被處理,否則什麼也沒有發生......我現在開始工作在小提琴上 – 2014-09-26 15:06:07

+0

我的觀點是我懷疑'$超時'是問題的根源(除非你使用的版本是角度有一個錯誤)。我暗示有可能包含這個觸發器的代碼/函數在遞歸中被調用,導致這個問題。我不能用簡單的jsFiddle(http://jsfiddle.net/twp3e6h2/)重現,所以你將需要,否則它沒有意義 – Ian 2014-09-26 15:11:26

回答

2

爲什麼不使用$超時你嘗試給我們一個$間隔並將其設置爲運行一次?

var interval = $interval(function() { 
    angular.element('#fileInput').trigger('click'); 
}, 100,1); 
+0

謝謝,沒想到!爲我工作。 – 2014-09-26 15:41:54

+0

我很高興幫助!乾杯! – 2014-09-26 15:44:44