2012-01-16 79 views
2

参考下面的代码,有没有办法将“my_event”发生后发生“test_2”处理程序绑定到“my_event”事件以便“测试2”马上运行?jQuery:绑定到已发生的事件并自动运行处理程序

<!DOCTYPE html> 
<html> 
    <head> 
    <title>tests</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
    </head> 
    <body> 
    <script type="text/javascript"> 

     $(document).bind("my_event", function() { 
      alert("test 1"); 
     }); 

     $(document).trigger("my_event"); 

     $(document).bind("my_event", function() { 
      alert("test 2"); 
     }); 

    </script> 
    </body> 
</html> 
+0

这听起来像是你要求一个bind的版本,如果事件每次都发生,它会立即触发。如果是这样,那么我不相信存在。 – JaredPar 2012-01-16 23:23:37

+0

你最终试图做什么?看起来像它可能是一个* XY问题*。 – 2012-01-16 23:24:42

+0

使用Facebook的Javascript SDK时,$(document).ready和fbAsyncInit之间存在竞态条件问题,如http://pivotallabs.com/users/jdean/blog/articles/1400-working-with-asynchronously-loaded -javascript。我在相同的博客文章中实现了详细的修复。我希望找到一种方法来取代所有$(文档).ready处理程序在该自定义事件。 – Pierre 2012-01-16 23:30:01

回答

2

结帐jQuery's special events。无论何时添加"facebookReady"事件,都会调用add回调函数,您可以选择立即调用回调函数或根据某些条件推迟回调函数。在这个例子中,我正在查看全球FB属性的存在以决定是否调用它。

jQuery.event.special.facebookReady = { 
    add: function(handleObject) { 
     if (window.FB) { 
      handleObject.handler.call(this); 
     } 
    } 
}; 

一旦设置了特殊事件的回调,就像通常那样绑定事件。

$(document).bind('facebookReady', ..); 

根据FB是否加载,它可能会或可能不会立即触发。

结帐a example

+0

这正是我正在寻找的,谢谢。连接的材料对我来说是全新的,并且令人感到惋惜。我没有看到它在jQuery文档中引用。我错过了吗? – Pierre 2012-01-17 01:19:07

+0

我不认为你错过了jQuery文档中的任何东西。我在那里找不到它:) – Anurag 2012-01-17 01:23:33

相关问题