假设我在元素bar
上有一个名为“#foo
”的事件。
有没有办法可以使用jQuery延迟对象强制函数在bar
事件监听器执行(已返回)后立即执行,无论是否有bar
个侦听器取消活动?
或许我甚至不需要jQuery呢?
编辑:只是澄清一下,从bar
处理程序中触发另一个事件或函数并不是我正在寻找的 - bar
处理程序还没有返回,所以这不是“之后那个bar
事件。“这个问题看似奇怪而且没有意义,因为我试图解决IE 8中一个非常具体的问题/错误。
需要这样的东西:
$('#foo').afterEvent('bar').then(function() {
// do something
});
答案 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是否'取消事件'都将执行此操作