列出所有在jQuery中的实时事件

8

我该如何在jQuery中查找特定元素绑定的live事件?

假设我有一个函数randomFunction,它从一个函数数组中返回一个随机函数。那么我怎样才能找到哪个函数已经被绑定到某个元素上了呢?

var arrayOfFunctions = []; //a whole bunch of functions
function randomFunction(array){}; //returns one of those functions
$('#certain_element').live('click', randomFunction(arrayOfFunctions));
< p>与live绑定 $('#certain_element')的函数对应的数组索引是什么?< / p>
3个回答

3

好的,我已经想通了。 对于一个 click 事件,针对 $('#certain_element'),将每个绑定的索引记录到控制台:

var relevantHandlers = $.map($(document).data('events').live, function(value){
  if(value.origType == 'click' && value.selector == '#certain_element'){
    return value.handler;
  }
}; //all handlers for #certain_element bound to click by live.
$.each(relevantHandlers, function(){
  console.log("the index is: " + $.inArray(this, arrayOfFunctions));
});

1

看一下这个插件。上次我使用它时,需要稍微修改一下以适应当时最新版本的jQuery,但它应该能给你一个方向。


那将处理绑定了 .click.bind 的正常事件,但不包括 .live - Mario

1
有一个很棒的书签工具叫做Visual Event,它可以显示将要被调用的代码。
但是由于你真正调用的是随机函数,也许只需要包含一个alert("function name")或console.log("function")这样简单的操作,如果你只是在测试的话。

整洁的书签脚本,但对于“live”绑定,它会突出显示整个文档,但不提供关于触发事件所需的目标信息。 - Mario
啊,这很有道理... .live()事件在触发 .live() 之前会冒泡到根元素。我以为我能够看到一个带有 .live() 绑定的 <a> 标签上的可视事件,但事实证明我将 delegate() 附加到了包含锚点的 <ul> 上。那样行得通。 - Chris May

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接