代码之家  ›  专栏  ›  技术社区  ›  jMyles

检查元素以调查jQuery事件绑定

  •  46
  • jMyles  · 技术社区  · 14 年前

    假设:我发现一个页面有一个按钮('#bigButton'),单击该按钮时,会使用jQuery显示一个llama('img#theLlama')。

    $('#bigButton').click(function(){
    $('img#theLlama').show();
    })
    

    现在,假设我有一个很大的HTML页面,其中包含一大堆.js文件。我可以点击按钮,看到驼峰出现,但我不知道上面的代码在哪里。

    我正在寻找的解决方案与Firebug中CSS提供的解决方案非常相似。我想检查这个元素,让它告诉我这个jQuery出现在button.js的第76行,以及这个元素上的任何其他绑定。

    * 注:悬赏是针对“骆驼问题”的具体答案,即指向上面描述的解决方案。*

    4 回复  |  直到 14 年前
        1
  •  100
  •   AncientSwordRage    8 年前

    使用 Firebug , FireQuery this fiddle

    点击Cmd+Shift+C(检查元素)并点击 按钮 揭示了这一点: Screenshot 1

    点击事件 Object {click= } 揭示这一点(在展开一些信息之后)

    Screenshot 2

    然后点击 function() 揭示了这一点:
    Screenshot 3

    你要找的代码应该是哪个,对吧?

    值得注意的是,Firebug并不总能找到某个源代码的确切行。我已经让这个方法完全失败了!另一种方法是使用命名函数表达式。将代码更改为:

    $('#bigButton').click(function showMyLlama(){
      $('img#theLlama').show();
    })
    

    现在在检查 events 对象:

    alt text

    这比 函数() 很明显,这个驯鹿给我们展示了一只美洲驼。你现在也可以搜索代码的函数名并找到它!


    Chrome ,它内置的web检查器和 this fiddle :

    点击Cmd+Shift+C(检查元素)并点击按钮,显示如下:
    Screenshot

    单击elements inspector中的按钮,然后按Escape打开JS控制台: Screenshot

    $0 引用“元素”面板中的选定元素。

    输入 $._data( $0 ) 将提供包含事件的jQuery(内部)数据对象,就像我们的Firebug示例一样,遗憾的是,Chrome不允许我们单击该函数,但它将让我们看到源代码:

    <Broken Screenshot link>


    .live() 事件:

    实时事件存储在 $._data( document, "events" ) 并包含 origHandler 指向函数:

    <Broken screenshot link>

        2
  •  4
  •   Nick Craver    14 年前

    http://firequery.binaryage.com/

    是个萤火虫插件 明确地

        3
  •  0
  •   Tgr    14 年前

    FireQuery是最方便的,但是如果需要手动执行,可以使用 $(element).data('events').click[0].handler (当然,如果有多个单击处理程序,则不一定为0)。在代码中找到该函数取决于您最喜欢的调试器。(使用命名函数有帮助。Firebug有时可以定位匿名函数,但通常不能。但是,如果您用鼠标悬停在函数的主体上,它将显示函数的主体。)

    更新 以下是使用FireQuery显示数据的方式:

    jQuery data in Firebug HTML view

    慰问:

    jQuery data in Firebug console

        4
  •  0
  •   johnjbarton    14 年前

    eventbug将显示元素的所有事件处理程序, http://getfirebug.com/releases/eventbug