2013-03-20 54 views
1

我爲我的表單提交構建了gif animator,因爲註冊需要多一點時間。如何在另一個函數的作用域中終止js函數

現在一切工作正常,但即使在成功消息後,我的gif動畫仍然保持運行。因此我的動畫功能仍在運行。我怎麼能殺死那個功能?

這就是我現在做的:

function loadSubmit(){ 
    ProgressImage = document.getElementById('progress_image'); 
    document.getElementById("progress").style.visibility = "visible"; 
    setTimeout("ProgressImage.src = ProgressImage.src",100); 
    return true; 
} 

和我在我的AJAX功能之前調用此:

loadSubmit(); 
$.ajax({ 
    url: "/register_me/", 
    type: "POST", 
    ... 
}).done(function(){ 
     // can i somehow kill loadSubmit() function in this scope? 
}); 

這將是那麼好,能夠做到這一點..

非常感謝

+2

爲什麼你不能這樣做 - 'document.getElementById(「progress」)。style.display =「none」;' – ShuklaSannidhya 2013-03-20 03:51:37

+1

嗯,在回調中隱藏圖像?這真的很難嗎? – epascarello 2013-03-20 03:52:16

+1

什麼是'setTimeout(「ProgressImage.src = ProgressImage.src」,100);'應該這樣做,確切地說?將一個字符串傳遞給'setTimeout'似乎很奇怪(我不知道你可以這樣做),除此之外,該字符串包含的代碼看起來像一個沒有操作的代碼。 – Celada 2013-03-20 03:52:25

回答

2

setTimeout返回一個整數值,然後可以用它來清除使用t的超時他的作用clearTimeout

function loadSubmit(){ 
    ProgressImage = document.getElementById('progress_image'); 
    document.getElementById("progress").style.visibility = "visible"; 
    // what exactly you want you achieve through this timeout 
    return setTimeout("ProgressImage.src = ProgressImage.src",100); 

} 

var intervalID = loadSubmit(); 
$.ajax({ 
    url: "/register_me/", 
    type: "POST", 
    ... 
}).done(function(){ 
    document.getElementById("progress").style.display = "none"; //EDIT 
    clearTimeout(intervalID) 
}); 

閱讀setTimout的文檔在MDN https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout

編輯:我誤解了問題。你需要隱藏ProgressImage來隱藏gif,你仍然需要清除超時。

+0

非常好,非常好。謝謝。我只是顯示並隱藏gif,就是這樣。基本上我不需要甚至js的功能。現在像一個魅力工作! :)。非常感謝 – doniyor 2013-03-20 04:12:27

+0

不應該先清除超時? – 2015-02-27 22:18:06

+0

我不確定它是否會有所作爲。 AFAIK javascript是單線程的,並且超時事件被添加到事件隊列中,並且在隱藏img之後或隱藏img之前清除超時時,事件也將從隊列中刪除。如果我錯了,請賜教。 – vdua 2015-03-01 17:12:08

相關問題