Man ir lapa, kurā daži notikumu klausītāji ir pievienoti ievades un izvēles logiem. Vai ir veids, kā noskaidrot, kuri notikumu klausītāji novēro konkrētu DOM mezglu un kādam notikumam?
Notikumi ir pievienoti, izmantojot:
Event.observe
;addEventListener
;element.onclick
.Ja nepieciešams tikai pārbaudīt, kas notiek lapā, varat izmēģināt Visual Event grāmatzīmi.
Atjaunināt: Vizuālais notikums 2 pieejams;
Tas ir atkarīgs no tā, kā notikumi ir pievienoti. Ilustrācijai pieņemsim, ka mums ir šāds klikšķa apstrādātājs:
var handler = function() { alert('clicked!') };
Mēs to pievienosim savam elementam, izmantojot dažādas metodes, dažas no kurām ļauj veikt pārbaudi, bet dažas - ne.
A metode) viena notikuma apstrādātājs
element.onclick = handler;
// inspect
alert(element.onclick); // alerts "function() { alert('clicked!') }"
B metode) vairāku notikumu apstrādātāji
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 metode): jQuery
$(element).click(handler);
1.3.x
// pārbaudīt
var clickEvents = $(element).data("events").click;
jQuery.each(clickEvents, function(key, value) {
alert(value) // brīdinājumi "function() { alert('clicked!') }"
})
1.4.x (apstrādātājs tiek saglabāts objektā)
// inspect
var clickEvents = $(element).data("events").click;
jQuery.each(clickEvents, function(key, handlerObj) {
alert(handlerObj.handler) // brīdina "function() { alert('klikšķis!') }"
// pieejami arī: handlerObj.type, handlerObj.namespace
})
(Skat. jQuery.fn.data
un jQuery.data
)
D metode): Prototips (netīrs)
$(element).observe('click', handler);
1.5.x
// pārbaudīt
Event.observers.each(function(item) {
if(item[0] == element) {
alert(item[2]) // brīdinājumi "function() { alert('clicked!') }"
}
})
1.6 līdz 1.6.0.3, ieskaitot (šeit ir ļoti grūti)
// pārbaudīt. "_eventId" ir paredzēts < 1.6.0.3 while
// "_prototypeEventID" tika ieviests 1.6.0.3 versijā.
var clickEvents = Event.cache[element._eventId || (element._prototypeEventID || [])[0]].click;
clickEvents.each(function(wrapper){
alert(wrapper.handler) // brīdinājumi "function() { alert('clicked!') }"
})
1.6.1 (nedaudz labāk)
// inspect
var clickEvents = element.getStorage().get('prototype_event_registry').get('click');
clickEvents.each(function(wrapper){
alert(wrapper.handler) // brīdinājumi "function() { alert('clicked!') }"
})
Ja jums ir Firebug, varat izmantot console.dir(objekts vai masīvs)
, lai konsoles žurnālā izdrukātu jebkuru JavaScript skalāru, masīvu vai objektu.
Izmēģiniet:
console.dir(clickEvents);
vai
console.dir(window);