2010-05-28 133 views
7

概述问题jQuery的事件处理程序队列

在jQuery中的,在该绑定的处理程序的顺序是在其中它们将如果正在结合相同元件被执行的顺序。

例如:

$('#div1').bind('click',function(){ 
// code runs first 
}); 

$('#div1').bind('click',function(){ 
// code runs second 
}); 

但是,如果我想第二个绑定代码先运行什么?

我目前的解决方案

目前,我的解决办法是修改事件队列:

$.data(domElement, 'events')['click'].unshift({ 
          type : 'click', 
          guid : null, 
          namespace : "", 
          data : undefined, 
          handler: function() { 
           // code 
          } 
         }); 

问题

有什么潜在的问题我的解决方案?

我可以安全地使用null作为guid的值吗?

在此先感谢。

回答

1

有一个有趣的插件叫eventstack。它允许您将事件绑定到事件队列的顶部或底部。我不知道你的问题有多普遍,或者你是否想要颠倒或任意排序堆栈中的事件,但插件可能会简化你的任务。

如果您希望按照特定顺序组装队列,可以尝试使用this answer中建议的方法 - 构建可以相互触发的自定义事件。

您的方法可能是最适合您的要求,但也许这些也是选项。

+0

谢谢。 由于我正在编写一个插件,我不想要求用户手动触发我每次创建的自定义事件。我希望它是自动的。 事件堆栈也没有帮助,因为我不想颠倒堆栈,但只需将我的插件的事件放置在堆栈的开始位置即可。 – resopollution 2010-05-28 22:18:23