是否可以在元素上找到委托事件?

时间:2012-05-18 21:37:51

标签: javascript jquery delegates

当通过$.on()将处理程序放置到元素时,是否有任何方法可以在您拥有所有目标时找到委派事件?

EX:

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

...

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

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

谢谢!

1 个答案:

答案 0 :(得分: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();
}

我明白了:

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匹配。