Evenemangsdelegation kan vara ett förvirrande ämne för dem som inte känner till konceptet. Men lyckligtvis är det verkligen enkelt. I den här snabba videotutorialen demonstrerar jag konceptet på knappt fyra minuter.
Istället, med händelseöverföring, lägger vi helt enkelt till en enda händelselistor till ett förfaderelement, kanske något som en "ul." Då, när användaren klickar på ett av dess barnelement, som en ankare, kontrollerar vi bara för att se om målet för klicket faktiskt var en ankaremärke. Om det var, fortsätter vi per vanligt.
$ ('ul'). klicka (funktion (e) om ($ (e.target) .is ('a')) alert ('clicked'););
Det fungerar på grund av det sätt som elementen fångas (inte IE) och bubbla upp. Tänk på följande enkla struktur.
När du klickar på ankaretiketten klickar du också på "li" och "ul" och till och med elementet "kropp". Detta kallas bubbling up.
Tänk på att detta bara är ett enkelt exempel för att förklara funktionaliteten. Vi använde jQuery, bara för att jag hade fyra minuter att spela in! I det speciella exemplet (titta på skärmbilden först) kunde vi ha använt två alternativ:
För det mesta var detta avsett att visa idén. Med vanlig JavaScript kan du göra något som:
// Hämta någon oorderad lista, som innehåller ankarkoder var ul = document.getElementById ('items'); // Snabb och enkel händelsehanterare för webbläsare - för att kompensera för IE: s attachEvent-hanteringsfunktion addEvent (obj, evt, fn, fånga) if (window.attachEvent) obj.attachEvent ("on" + evt, fn); annat om (! capture) capture = false; // fånga obj.addEventListener (evt, fn, fånga) // Kontrollera om noden som klickades är en ankaremärke. Om så är fallet, fortsätt per vanligt. addEvent (ul, "click", funktionen (e) // Firefox och IE åtkomst till differentieringselementet different. e.target och event.srcElement. var target = e? e.target: window.event.srcElement; om (target.nodeName.toLowerCase () === 'a') alert ("clicked"); returnera false;);