什麼你想要做的就是所謂的多播的代表,在這裏你將多個,獨立,處理同一事件。它可以在JavaScript寫成如下:
function multicast(){
if (arguments == null || arguments.length == 0) return function(){ };
var fns = [], j = 0;
for (var i = 0; i < arguments.length; i++){
if (typeof(arguments[i]) == "function")
fns[j++] = arguments[i];
}
return function(){
for (var i = 0; i < fns.length; i++)
fns[i]();
};
}
然後調用爲:(其中foo和酒吧都是功能)
window.onload = multicast(window.onload, foo, bar);
沒有jQuery是必要的,這是嚴格的JavaScript。您會注意到每個函數都將按順序執行,但與前一個函數調用的返回值(如果有)無關。
您將在Delphic Sage發現這是一個更完整的描述。我還要指出的是,鏈接文章的作者約翰學分Resig的教程Learning Advanced JavaScript
[編輯] 我想有東西從你的問題遺漏。我讀了這個問題的方法應該做你所要求的:(使用功能多播()以上)
$(#'foo').bind('bar',multicast(firstFunction, secondFunction);
現在,當「酒吧」發生了firstFunction將執行secondFunction緊隨其後,並且將這樣做,無論是否對了firstFunction「取消事件」
我覺得本身就是你的問題很有趣,但如果你的基本目標是解決一個IE8問題,您應該發表一個關於這個問題的問題,因爲有可能是對付它的一些其他的方式。 – nnnnnn
已經有。實際上只有一個答案有效,但它依賴於setTimeout()並且不是確定性的。 – user979672
@ user979672 - 你能提供IE8有關問題的詳細信息? – ShankarSangoli