我可使用jQuery找到綁定在元素上的事件嗎?

我在此連接上綁定了兩個事件處理程序: 瀏覽器

<a href='#' id='elm'>Show Alert</a>

JavaScript: 框架

$(function()
{
  $('#elm').click(_f);
  $('#elm').mouseover(_m);
});

function _f(){alert('clicked');}
function _m(){alert('mouse over');}

有什麼方法能夠獲取綁定在元素上的全部事件的列表,在本例中是id="elm"元素? 函數


#1樓

在現代版本的jQuery中,您將使用$._data方法查找jQuery附加到相關元素的任何事件。 注意 ,這是僅供內部使用的方法: 工具

// Bind up a couple of event handlers
$("#foo").on({
    click: function(){ alert("Hello") },
    mouseout: function(){ alert("World") }
});

// Lookup events for this particular Element
$._data( $("#foo")[0], "events" );

$._data的結果將是一個包含咱們設置的兩個事件的對象(以下圖所示,其中的mouseout屬性已展開): 開發工具

$ ._的控制檯輸出

而後,在Chrome中,您能夠右鍵單擊處理函數,而後單擊「查看函數定義」,以向您顯示在代碼中定義的確切位置。 this


#2樓

當我像這樣向$ ._ data傳遞一個稍微複雜的DOM查詢: $._data($('#outerWrap .innerWrap ul li:last a'), 'events')它將在瀏覽器控制檯中引起未定義。 spa

所以,我必須在父div上使用$ ._ data: $._data($('#outerWrap')[0], 'events')來查看a標籤的事件。 這是相同的JSFiddle: http : //jsfiddle.net/giri_jeedigunta/MLcpT/4/ .net


#3樓

jQuery Audit插件插件應可以讓您經過常規的Chrome開發工具進行此操做。 它不是完美的,可是它應該讓您看到綁定到元素/事件的實際處理程序,而不單單是通用jQuery處理程序。 插件


#4樓

我用過相似的東西if($ ._ data($(「」 a.wine-item-link「)[0])。events == null){...作一些事情,再次將它們的事件處理程序再次綁定}檢查若是個人元素綁定到任何事件。 若是您已從該元素取消附加全部事件處理程序,它將仍然顯示未定義(空)。 這就是爲何我在if表達式中對此進行評估的緣由。 調試


#5樓

通常狀況:

  • 點擊F12打開開發工具
  • 點擊Sources標籤
  • 在右側,向下滾動到Event Listener Breakpoints ,而後展開樹
  • 單擊您想聽的事件。
  • 與目標元素進行交互,若是它們觸發,您將在調試器中獲得一個斷點

一樣,您能夠:

  • 右鍵單擊目標元素 ->選擇「 Inspect element
  • 在開發框架的右側向下滾動,在底部是「 event listeners 」。
  • 展開樹以查看將哪些事件附加到元素。 不知道這是否適用於經過冒泡處理的事件(我猜不是)
相關文章
相關標籤/搜索