是否可以在元素上找到委托事件

Is it possible to find a delegated event on an element?

本文关键字:事件 元素 是否      更新时间:2023-09-26

当通过$.on()将处理程序放置到元素时,当您只有目标时,有没有办法找到委托的事件?

前任:

$('body').on('click', '#myLink', function(){ doStuff() });

$('#myLink').eventsFromOn();

我知道这似乎很奇怪,因为如果事件有委托事件数据,它就不再是真正的委托事件了,但值得一问......

谢谢!

如果您正在寻找处理程序数据,如果您足够努力,看起来您可以使用未记录的信息找到它。在未记录的events数据对象上,您有键 typehandler , 重要的是 ,selector 。因此,如果您从 #mylink 开始,您可以查看其祖先中每个级别的events数据,以查找所需事件的匹配项,其中$("#mylink").is(selector)为真。

例如,对于此 HTML:

<body>
  <div id="mylink">click me</div>
</body>

如果我执行

$("body").on("click", "#mylink", function() {
    // Anything
});

然后这样做:

var level = $("#mylink");
while (level[0]) {
  console.dir(level.data('events'));
    level = level.parent();
}

我明白这个:

定义  无属性对象  点击: 数组[1]    0:对象        数据:未定义        指导:1        处理程序:函数 (( {        命名空间:"        原始类型:"点击"        快速:阵列[4]        选择器:"#mylink"        类型:"点击"        __proto__:对象        代表计数: 1        长度: 1        __proto__: 数组[0]        __proto__:对象定义  无属性

如您所见,body上的click手在那里,selector与元素#mylink匹配。