我添加單擊事件處理程序elment等待click事件完成
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
,並引發點擊事件
$(".elem").click();
//code2
我如何確保代碼1執行
我添加單擊事件處理程序elment等待click事件完成
$(".elem").click(function(){
$.post("page.php".function(){
//code1
})
})
,並引發點擊事件
$(".elem").click();
//code2
我如何確保代碼1執行
(忽略之後碼2執行WebWorkers)JavaScript運行在一個單獨的線程上,所以你可以確定code2將總是在code1之後執行。
除非您的代碼1做一些事情異步像Ajax調用或setTimeout()
,在這種情況下,觸發點擊處理程序將完成,然後CODE2會執行,然後(最終)回調從Ajax調用(或setTimeout()
,或什麼)將運行。
編輯:爲您更新的問題,碼2總會代碼1之前執行,因爲我異步上面所說的Ajax回調將在稍後發生(即使Ajax響應速度非常快,也不會調用回調,直到目前的JS完成)。
「我如何確保代碼1執行後碼2,執行」
使用.click()
沒有params爲一個快捷方式到.trigger("click")
,但如果你真的叫.trigger()
明確可以提供額外的參數將被傳遞給處理程序,它可以讓您這樣做:
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
也就是說,在點擊處理程序測試是否已在callback
參數中傳遞函數,如果是,則調用它。這意味着事件發生時「自然」將不會有回調,但是當您以編程方式觸發它並傳遞一個函數時,該函數將被執行。 (請注意,您通過.trigger()
傳遞的參數不一定是函數,它可以是任何類型的數據,並且您可以傳遞多個參數,但爲此我們需要一個函數。有關更多信息,請參閱.trigger()
doco。 )
我不認爲這是真的。它們不會同時執行,但我不相信DOM API會對事件處理程序的調用順序提供任何保證。即使它們碰巧在一個瀏覽器的一個版本上以正確的順序觸發,但不能保證在其他情況下會發生什麼。 – 2012-08-03 06:17:56
是的,我有一個AJAX調用它[編輯] – 2012-08-03 06:21:26
人們,OP的問題只有一個事件處理程序。 code2只是觸發它。 – JJJ 2012-08-03 06:24:14
你可以嘗試寫這樣:
$(".elem").live("click", function(){
//code1
})
而且,正如你的射擊觸發都會被執行。
裹code2
的方法,並將其添加爲內部code1
所以它總是會得到code1
後調用的回調執行
code2 = function(){/*code2*/};
$(".elem").click(function(){
//code1
code2();
})
這不是一個解決方案,我想執行一些其他地方沒有code2點擊事件 – 2012-08-03 06:29:21
你從來沒有提到它應該是可重用的。以上看起來像是一個很好的解決方案。 – 2012-08-03 06:32:46
你從來沒有說過任何關於那個所以我假設。我可能會因爲不清楚而低估這個問題,但因爲你是新人,所以我不打算這麼做。 @JonasGeiregat:謝謝。 – Gautam 2012-08-03 06:38:46
使用JavaScript一行行。所以不管出現什麼,都會先執行。因此,在其他方法之前添加點擊代碼將起作用。
此外,如果有任何異步調用,然後採取只有當你得到響應設置的標誌。
var clicked = false; $('#elem')。點擊(功能(){做一些異步處理 clicked = true; });
而(!點擊){//什麼都不做}
//其他功能,如果使用POST方法,在物業異步=真正的設置被稱爲
或第二選擇將是。
while(!clicked){}將使瀏覽器無法響應.. – 2012-08-03 07:42:50
和我認爲第二個選項做同樣的事情,直到發佈請求完成 – 2012-08-03 07:43:19
請定義「代碼1執行」的含義。你的代碼有一個ajax方法。那麼你是說當ajax調用執行或者ajax執行並完成時呢? – Rahatur 2018-03-02 06:26:33