2012-01-27 53 views
6

I 认为事件处理程序按它们注册的顺序进行处理。 (这是否正确?)如果是这种情况,那么如果我在脚本的开头添加了一个事件处理程序,我可以绝对确定它会在随后的处理程序附加到相同事件之前触发吗?还有事件命名空间对此有什么影响?是否事件处理程序是串联的(一个在下一个之前完成)还是并行?确保jQuery事件处理程序执行顺序

我想这样做是因为我的脚本依赖于视口大小,该大小会在resize事件中发生变化,我需要不断地查找它。我不想在每个处理函数中重复调用$(window).width(),而是希望在脚本的顶部放置一个处理程序,该处理程序将$(window).width()保存到每个调整大小的对象属性。然后在后来的处理程序中,我可以访问该属性并确定它是最新的度量。

我知道我可以创建一个自定义事件,只要计算完成就触发,并将后续处理程序附加到自定义事件。但是,我不想这样做,因为我需要保持与我之后发布的插件的互操作性,这些插件也可能附加到resize事件。

+1

查看http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery – ustun 2012-01-27 17:04:14

+0

您是否失去了对'$(window).width()'的显着性能?如果不是,为什么要麻烦?你只会引入对全局变量状态的脆弱依赖。 – millimoose 2012-01-27 17:05:19

+0

@Inerdial我需要调用它和其他一些计算,如20次。我认为这会有所作为。 – ryanve 2012-01-27 17:08:55

回答

4

如果您在任何其他脚本运行之前附加了您的事件处理函数(甚至只是一个插件),那么您的回调将始终触发。

您可以通过数据对象检查事件处理程序的数组:

$(window).data('events'); 

注:这是一种非成文规定,可能无法最终奏效。仅用于检查。

+0

对不起,有没有一种方法来访问与纯Javascript? – 2012-01-27 17:07:15

+3

@AndréAlçadaPadez - 没有。不仅如此,这只会给你使用jQuery附加的事件处理程序。 – 2012-01-27 17:08:39

+1

谢谢,我有很多麻烦的事件:) – 2012-01-27 17:09:23

相关问题