jQuery或普通JS:事件监听器返回后执行函数

时间:2012-01-26 02:04:33

标签: javascript jquery deferred

假设我在元素bar上有一个名为“#foo”的事件。

有没有办法可以使用jQuery延迟对象强制函数在bar事件监听器执行(已返回)后立即执行,无论是否有bar个侦听器取消活动?

或许我甚至不需要jQuery呢?

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

需要这样的东西:

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

2 个答案:

答案 0 :(得分:0)

在bar事件中运行另一种方法

实施例

$('#foo').bind('bar', function () {
    // do bar stuff
    // run another method
    baz();
    // or trigger any other listening events
    $('#bin').trigger('otherEvent');
});

答案 1 :(得分: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是否'取消事件'都将执行此操作

相关问题