当通过 $.on()
将处理程序放置到元素时,当您拥有的只是目标时,是否有任何方法可以找到委托(delegate)事件?
例如:
$('body').on('click', '#myLink', function(){ doStuff() });
...
$('#myLink').eventsFromOn();
我知道这看起来很奇怪,因为如果事件具有委托(delegate)事件数据,它就不再是真正的委托(delegate)事件,但值得一问...
谢谢!
最佳答案
如果您正在寻找处理程序数据,如果您足够努力,看起来您可以通过未记录的信息找到它。关于无证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
.
关于javascript - 是否可以在元素上找到委托(delegate)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660055/