jQuery事件处理程序队列

8

问题概述

在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个回答

1

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

如果你想按照非常特定的顺序组装你的队列,你可以尝试this answer中提出的方法——构建自定义事件,可以依次触发彼此。

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


由于我正在编写一个插件,我不想要求用户每次手动触发我创建的自定义事件。我希望它是自动的。Eventstack也没有帮助,因为我不想反转堆栈,而只是将我的插件事件放在堆栈的开头。 - resopollution

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接