2

假设我bar在 element 上有一个名为 ""的事件#foo

有没有一种方法可以使用 jQuery 延迟对象来强制函数在bar事件侦听器已经/已经执行(返回)后立即执行,无论是否有任何bar侦听器取消事件?

或者也许我什至不需要 jQuery?

编辑:澄清一下,从bar处理程序中触发另一个事件或函数并不是我想要的——bar处理程序还没有返回,所以这不是“在那个bar事件之后”。这个问题可能看起来很奇怪而且没有意义,因为我试图解决 IE 8 中的一个非常具体的问题/错误。

需要这样的东西:

$('#foo').afterEvent('bar').then(function() {
    // do something
});
4

2 回答 2

0

您想要做的是称为多播委托,您可以在其中为同一事件分配多个独立的处理程序。它可以用 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 和 bar 都是函数)

window.onload = multicast(window.onload, foo, bar); 

不需要 JQuery 这严格来说是 JavaScript。您会注意到每个函数都将按顺序执行,但独立于先前函数调用的返回值(如果有)。

您将在Delphic Sage中找到对此的更完整描述。我还要注意,链接文章的作者归功于 John Resig 的教程Learning Advanced JavaScript

[编辑] 我想你的问题中缺少一些东西。我阅读它的方式应该可以满足您的要求:(使用上面的函数 multicast() )

$(#'foo').bind('bar',multicast(firstFunction, secondFunction);

现在,当“bar”发生时,firstFunction 将立即执行,然后是 secondFunction,并且无论 firstFunction 是否“取消事件”都会这样做

于 2012-01-26T02:27:59.063 回答
0

只需在 bar 事件中运行另一个方法

例子

$('#foo').bind('bar', function () {
    // do bar stuff
    // run another method
    baz();
    // or trigger any other listening events
    $('#bin').trigger('otherEvent');
});
于 2012-01-26T02:09:18.553 回答