如何绑定到jQuery中的所有自定义事件

b09cbbtk  于 2022-11-29  发布在  jQuery
关注(0)|答案(1)|浏览(175)

我知道绑定到所有DOM事件是不可能的,我知道您可以通过提供一个空格分隔的列表来绑定到多个事件。
但是,是否可以绑定到所有自定义事件(最好通过通配符模式(如“abc*”或名称空间)进行过滤)?

**编辑:**为了澄清,我创建了一些自定义小部件来响应一些自定义事件。例如,它们都处理一个名为stepReset的事件,并重置它们的内部模型。

在我写了这些之后,我意识到事件不会向下冒泡,所以调用$(body).trigger('stepReset')基本上什么也不做。因此,我正在考虑在所有小部件的父元素上添加一个伞状事件处理程序,以向下传播所有相关事件。
(我知道这不是一个很好的解决方案,但是我忘了用一个公共类来标记带有处理程序的元素,所以没有简单的方法来使用select them all。)

moiiocjp

moiiocjp1#

对于即将进行的编辑,您可以通过访问对象的数据来检索 * 所有 * 绑定事件:

var boundEvents = $.data(document, 'events');

从这里,您可以循环访问生成的对象并检查所选通配符的每个属性,或者循环访问该属性的数组元素并检查每个元素的namespace属性。
例如,

$.each(boundEvents, function () {
    if (this.indexOf("*"))   // Checks each event name for an asterisk *
        alert(this);

    // alerts the namespace of the first handler bound to this event name
    alert(this[0].namespace); 
});

如果我没理解错的话,您可以迭代特殊事件对象来获得定制事件的列表(包括jQuery源代码中指定的事件)。下面是一个ES5示例,您需要自己针对较旧的浏览器进行修改,或者使用a polyfill来表示Object.keys

var evts = Object.keys(jQuery.event.special).join(" ");
$("#myDiv").on(evts, function (e) {
    // your code here
});

相关问题