這取決于事件是如何連接的。為了舉例說明,假設(shè)我們有以下單擊處理程序:
var handler = function() { alert('clicked!') };
我們將使用不同的方法將它附加到元素上,有些方法允許檢查,有些方法不允許檢查。
方法A)單個(gè)事件處理程序
element.onclick = handler;// inspectalert(element.onclick); // alerts "function() { alert('clicked!') }"
方法B)多事件處理程序
if(element.addEventListener) { // DOM standard
element.addEventListener('click', handler, false)} else if(element.attachEvent) { // IE
element.attachEvent('onclick', handler)}// cannot inspect element to find handlers
方法C):jQuery
$(element).click(handler);
1.3.x
// inspectvar clickEvents = $(element).data("events").click;jQuery.each(clickEvents, function(key, value) {
alert(value) // alerts "function() { alert('clicked!') }"})
1.4.x(將處理程序存儲(chǔ)在對(duì)象中)
// inspectvar clickEvents = $(element).data("events").click;jQuery.each(clickEvents, function(key, handlerObj) {
alert(handlerObj.handler) // alerts "function() { alert('clicked!') }"
// also available: handlerObj.type, handlerObj.namespace})
(見jQuery.fn.data
和jQuery.data
)
方法D):原型(凌亂)
$(element).observe('click', handler);
1.5.x
// inspectEvent.observers.each(function(item) {
if(item[0] == element) {
alert(item[2]) // alerts "function() { alert('clicked!') }"
}})
1.6至1.6.0.3,包括在內(nèi)(在此非常困難)
// inspect. "_eventId" is for < 1.6.0.3 while // "_prototypeEventID" was introduced in 1.6.0.3var clickEvents =
Event.cache[element._eventId || (element._prototypeEventID || [])[0]].click;clickEvents.each(function(wrapper){
alert(wrapper.handler) // alerts "function() { alert('clicked!') }"})
1.6.1(略好一點(diǎn))
// inspectvar clickEvents = element.getStorage().get('prototype_event_registry').get('click');clickEvents.each(function(wrapper){
alert(wrapper.handler) // alerts "function() { alert('clicked!') }"})