获取使用jQuery附加到元素的事件列表

时间:2016-08-13 00:47:40

标签: jquery

我想检索附加到元素的事件列表......

<div id="div_test">click HERE!</div>

这有效

$("#div_test").click(function(e)
{
    var events_list = $._data( $(this)[0], 'events');
    console.log(events_list.click[0]);
});

但为什么这不是?

$(document).on("click", "#div_test", function(e)
{
    var events_list = $._data( $(this)[0], 'events');
    console.log(events_list.click[0]);
});

FIDDLE

1 个答案:

答案 0 :(得分:1)

原因是click元素没有触发#div_test元素,而document元素触发e.delegateTarget元素。 您可以检查两个版本的click,以查看哪个元素触发了$(document).on("click", "#div_test1", function(e) { console.log(e.delegateTarget.nodeName); }); $("#div_test2").click(function(e) { console.log(e.delegateTarget.nodeName); });事件:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div_test1">click HERE!</div>
<br /><br />
<div id="div_test2">click HERE!</div>
$("#div_test").click

当您使用click时,您将$(document).on("click", "#div_test"事件附加到该特定元素,这样您就可以获取附加到该元素的所有事件。

然而当您使用click#div_text个事件附加到您内部的document元素中click
您实际执行的操作是将document事件附加到#div_test元素,并且当浏览器捕获该事件时,jquery会检查您单击的实际元素是否为$(document).on("click", "#div_test", function(... 元素。
这允许您将“附加事件”“附加到尚未创建的元素”。

总结一下:

$(document).find('#div_test').on("click", function(...

不是

csv