[英]How to bind to all custom events in jQuery
我知道不可能绑定到所有DOM事件,我知道你可以通过提供以空格分隔的列表来绑定到多个事件。
但是可以绑定到所有自定义事件(最好通过像'abc *'或name-space这样的通配符模式进行过滤)吗?
编辑:为了澄清,我创建了一些响应某些自定义事件的自定义小部件。 例如,它们都处理一个名为“stepReset”的事件并重置其内部模型。
在我写完这些之后,我意识到事件不会消失,所以调用$(body).trigger('stepReset')
基本上什么都不做。 因此,我正在考虑在所有小部件的父元素上添加一个伞状事件处理程序,以传播所有相关事件。
(我知道这不是一个优雅的解决方案,但我忘了用一个普通类的处理程序标记元素,所以没有简单的方法可以使用它们全部选择。)
关于即将进行的编辑,您可以通过访问对象的数据来检索所有绑定事件:
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例如,你需要将它自己适应旧的浏览器,或使用一个填充工具为Object.keys
:
var evts = Object.keys(jQuery.event.special).join(" ");
$("#myDiv").on(evts, function (e) {
// your code here
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.