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

时间:2012-03-16 10:29:36

标签: javascript jquery javascript-events

我知道不可能绑定到所有DOM事件,我知道你可以通过提供以空格分隔的列表来绑定多个事件。

但是是否可以绑定到所有自定义事件(最好通过'abc *'或名称空间等通配符模式进行过滤)?

修改 为了澄清,我创建了一些响应某些自定义事件的自定义小部件。例如,它们都处理一个名为“stepReset”的事件并重置其内部模型。

在我写完这些之后,我意识到事件不会消失,所以调用$(body).trigger('stepReset')基本上什么都不做。因此,我正在考虑在所有小部件的父元素上添加一个伞状事件处理程序,以便传播所有相关事件。

(我知道这不是一个优雅的解决方案,但是我忘了用带有普通类的处理程序标记元素,因此没有简单的方法可以使用它们全部选择。)

1 个答案:

答案 0 :(得分:7)

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

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
});