2015-07-12 51 views
0

事件監聽器實際上在事件完成之前開始運行他們的代碼,因此我們有能力阻止Default()。但是如果我必須在事件結束後才能做某件事,那麼以前不這樣做真的很重要?JS在事件發生後做了些什麼

我試着將需要該事件就像一個自調用函數聽者的return語句後只完成後運行該代碼:

$(...).on(event, function(evt){ 
    //do stuff 
    return (function(){ 
     // do stuff after the event 
     })(); 
}); 

但是,這是沒有幫助的。似乎工作的唯一的東西是使用setTimeout。但它並不是一個好主意,因爲它不是確定性的,在某些情況下超時可能會變得不足,並且這個想法會失敗。 只有在活動結束後我該如何做點什麼?

+0

事件處理程序中的// do stuff是什麼?什麼是確定_「事件結束後_」的方法?可以創建stacksnippets,jsfiddle http://jsfiddle.net來演示嗎? – guest271314

+0

@vinayakj _「使用$ .when正如上面提到的問題'答案'_如果傳遞給'$ .when()'的函數不是jQuery延遲對象會立即運行嗎? – guest271314

+0

@vinayakj,我如何將它鏈接到預定義事件之一?就像在提交表單後做些事情一樣? –

回答

0

作爲瀏覽器優化,事件處理程序稍早被調用以防止可能的阻塞行爲。你可以使用setTimeout稍微延遲30ms。根據定義調用和處理事件是不確定的。它不知道「完成」事件意味着什麼。你對處理程序的處理有更多的上下文。如果是XHR調用,那麼會有onreadystatechange回調,如果它正在加載圖像,請使用「onload」事件。表單提交,如果通過AJAX調用完成,可以通過readyState == 4檢測;否則你可能會檢測到服務器端的$ _​​POST數據並注入一個腳本塊。

相關問題