0

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

前任:

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

...

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

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

谢谢!

4

1 回答 1

2

如果您正在寻找处理程序数据,如果您足够努力,您似乎可以找到带有未记录信息的信息。在未记录的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
        处理程序:函数(){
        命名空间:“”
        origType: "点击"
        快速:数组[4]
        选择器:“#mylink”
        类型:“点击”
        __proto__: 对象
        委托数:1
        长度:1
        __proto__: 数组[0]
        __proto__: 对象
不明确的
  没有属性

如您所见,clickhander 就body在那里,与selectorelement 匹配#mylink

于 2012-05-18T21:52:32.527 回答