我想检索附加到元素的事件列表......
<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]);
});
答案 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