2013-05-12 28 views
1

函數觸發一個事件並傳遞一些數據,然後這些數據可能會被偵聽器處理。如果不是,該功能希望自己處理數據。那麼,因爲我不知道這個軟件包是否被處理過,所以我的想法是找出是否有聽衆。有沒有辦法做到這一點,或者有沒有人對我的問題有更好的想法?詢問事件是否在jQuery中有監聽器

在此先感謝!

+0

試過'$(元件).hasEventListener(類型)'之前移除任何左撇子? – Cherniv 2013-05-12 09:01:02

+0

看起來像是一個插件:https://github.com/sebastien-p/jquery.hasEventListener – Barmar 2013-05-12 09:02:27

+1

所有事件都綁定到某些元素。所以在Chrome中你有開發者工具 - >元素標籤 - >事件監聽器標籤(在右側)。猜猜其他瀏覽器的開發工具中有類似的東西。 – zeliboba 2013-05-12 09:04:02

回答

2

您就可以向該與jQuery之前1.8這樣的:

<script src="http://code.jquery.com/jquery-1.6.min.js"></script> 

<script> 
$(document).ready(function() { 

$("#click_here").click(function() { 
    alert("Handler for .click() called."); 
}); 

console.log($('#click_here').data('events')); 

}); 

</script> 

<div id="click_here">Click here</div> 
1

我創建了一個插件,主要是爲了在你的測試中使用。

// Example usage 
$('.foo').hasEvent('click', someHandler) 
// returns true if someHandler is bound via jQuery on '.foo' 
// for the click event 

插件測試使用jQuery 1.7工作,並達到

The plugin is hosted on github

1

我有一個非常類似的問題。它從來沒有被jquery正確支持的東西,而是有點破解。所以,你可以通過使用

data('events')

1.8後前做1.8版本的jQuery,你可以使用:

$._data($('.element')[0], 'events');

但如果你試圖做我在做什麼...確保一個事件處理程序只在控件上分配一次(也就是在一些表單驗證後保存按鈕),那麼您可以:

  1. 將ac lass並將其刪除以指示元素是否有事件(醜陋)。
  2. 分配給它即

$('element').unbind('event'); $('element').on('click', save);