Event delegering kan være et forvirrende tema for de som ikke er kjent med konseptet. Men heldigvis er det veldig enkelt. I denne hurtigvideo-videoopplæringen vil jeg demonstrere konseptet på bare under fire minutter.
I stedet, med hendelsesdelegasjon, legger vi ganske enkelt til en enkelt hendelselytter til et forfedreelement, kanskje noe som en "ul." Da, når brukeren klikker på et av sine barnelementer, som en ankermerke, kontrollerer vi bare for å se om målet for klikket faktisk var en ankermerke. Hvis det var, fortsetter vi per vanlig.
$ ('ul'). klikk (funksjon (e) hvis ($ (e.target) .is ('a')) alert ('klikket'););
Det fungerer på grunn av måten elementene er fanget (ikke IE) og boble opp. For eksempel, vurder følgende enkle struktur.
Når du klikker på ankeretiketten, klikker du også på 'li' og 'ul' og til og med elementet 'kropp'. Dette kalles å boble opp.
Vær oppmerksom på at dette bare er et enkelt eksempel for å forklare funksjonaliteten. Vi brukte jQuery, bare fordi jeg hadde fire minutter å spille inn! I det aktuelle eksemplet (se på screencast først), kunne vi ha brukt to alternative alternativer:
For det meste var dette ment å demonstrere ideen. Med vanlig JavaScript kan du gjøre noe som helst:
// Få noen uordnet liste, som inneholder ankerkoder var ul = document.getElementById ('items'); // Rask og enkel kryssbrowser hendelseshåndterer - for å kompensere for IEs attachEvent handler-funksjon addEvent (obj, evt, fn, fangst) if (window.attachEvent) obj.attachEvent ("on" + evt, fn); else if (! capture) capture = false; // fange obj.addEventListener (evt, fn, fange) // Sjekk for å se om noden som ble klikket, er en ankermerke. I så fall fortsett som vanlig. addEvent (ul, "klikk", funksjon (e) // Firefox og IE tilgang til målelementet forskjellige. e.target og event.srcElement, henholdsvis. var target = e? e.target: window.event.srcElement; hvis (target.nodeName.toLowerCase () === 'a') alert ("klikket"); return false;);