当通过$.on()
将处理程序放置到元素时,是否有任何方法可以在您拥有所有目标时找到委派事件?
EX:
$('body').on('click', '#myLink', function(){ doStuff() });
...
$('#myLink').eventsFromOn();
我知道这看起来很奇怪,因为如果事件有委托事件数据,它不再是一个委托事件,但值得一提......
谢谢!
答案 0 :(得分:2)
如果您正在寻找处理程序数据,如果您努力尝试,看起来可以使用未记录的信息找到它。在未记录的events
数据对象上,您有密钥type
,handler
,以及 - 重要的是 - 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();
}
我明白了:
undefined No Properties Object click: Array[1] 0: Object data: undefined guid: 1 handler: function () { namespace: "" origType: "click" quick: Array[4] selector: "#mylink" type: "click" __proto__: Object delegateCount: 1 length: 1 __proto__: Array[0] __proto__: Object undefined No Properties
正如您所见,click
上的body
人在那里,selector
与元素#mylink
匹配。