2012-04-17 69 views
2

我有這個工作的罰款切換(顯示/隱藏):jQuery的 - 回調事件處理程序中

$('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();}); 

在所有的切換結束,不過,我想調用一個函數rs(1);

計劃1:我試着把回撥放在撥動開關上,但這一切都不合時宜。

$('#RCH'+r).on('click',function(e){ 
    $('#RSC'+r).find('.rct,.rcp').toggle('',function(){rs(1);}); 
}); 

上述要求的類(如一個each)的每一次出現的功能rs(1)。它也解除了通常發生的情況,因此如果.rcp正在顯示並且.rct被隱藏,恰恰相反。因此,計劃1使得所有的事情都在一個手提籃裏變成地獄。計劃2:我也嘗試在.on函數(如下)切換後放rs(1)

$('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();rs(1);}); 

這種方法,但是,火災rs(1)之前切換已經完成,所以rs功能沒有完成其工作。

所以...我怎麼能在切換完成後觸發rs(1);

謝謝。

+1

'toggle()'是即時的,所以後者應該工作? – Matt 2012-04-17 10:16:47

+0

我會這麼想的,但似乎並不如此。我會檢查:) [稍後]不,它確實沒有出現。我猜測是因爲它循環遍歷兩個類的所有實例。 – Nick 2012-04-17 10:55:49

+0

我的錯誤,每個人。這是瞬間的。但是我最近改變了rs函數來接受兩個參數,而不是一個。所以函數沒有被正確調用。千赦。你是對的,馬特和費利克斯:) – Nick 2012-04-17 11:12:14

回答

2

那麼,首先,.toggle()是即時的,所以我假設你實際上使用的是.toggle(/* some duration */)。在這種情況下,你可以通過一個切換的動畫完成後調用函數:

$('sel').toggle(/* duration */, function() { 
    // ... 
}); 

如果你實際使用.toggle()但由於某種原因有哪些正在延遲你的代碼失敗了,你可以試試這個:

$('sel').toggle(0, function() { 
    // ... 
}); 
+0

我希望切換是即時的。當我添加回調函數時,我正在使用.toggle('',function(){...它實現了與toggle(0,function(){... – Nick 2012-04-17 10:37:41

+0

相同的效果:)見上面我的道歉:) – Nick 2012-04-17 11:12:49

0
$.when($('#RCH'+r).on('click',function(e){$('#RSC'+r).find('.rct,.rcp').toggle();})) 
    .done(function(){rs(1);}); 

試試這個,我希望這個作品。

+0

This在事件處理程序被附加之後會觸發rs(1)函數,而不是在事件處理程序觸發時,對嗎?我希望rs(1)在處理程序觸發時運行(即,當用戶單擊RCH3時(如果r = 3)。但謝謝你的建議:) – Nick 2012-04-17 10:49:28