Evenimentul delegație poate fi un subiect confuz pentru cei care nu sunt familiarizați cu acest concept. Dar, din fericire, este foarte simplu. În acest tutorial video rapid, voi demonstra conceptul în doar patru minute.
În schimb, cu delegarea evenimentului, pur și simplu adăugăm un singur ascultător de eveniment la un element de strămoș, poate ceva de genul "ul". Apoi, atunci când utilizatorul face clic pe unul dintre elementele copilului său, cum ar fi o etichetă de ancorare, verificăm doar dacă obiectivul clicului a fost, de fapt, o etichetă de ancorare. Dacă a fost, vom proceda ca de obicei.
$ ('ul'). faceți clic pe (funcția (e) if ($ (e.target) .is ('a')) alert ('clicked');
Funcționează datorită modului în care elementele sunt capturate (nu IE) și se balansează. De exemplu, luați în considerare următoarea structură simplă.
Când faceți clic pe eticheta de ancorare, faceți clic, de asemenea, pe elementele "li" și "ul" și chiar pe elementul "corp". Aceasta se numește bâzâit.
Rețineți că acesta este doar un exemplu simplu pentru a explica funcționalitatea. Am folosit jQuery, doar pentru că am avut patru minute să înregistrez! În acest exemplu special (vizionați mai întâi ecranul), am fi putut folosi două opțiuni alternative:
În mare parte, acest lucru era menit să demonstreze ideea. Cu JavaScript obișnuit, puteți face ceva de genul:
// Obțineți o listă neordonată, care conține etichetele anchor var ul = document.getElementById ('items'); / / Manipulatorul evenimentului rapid și simplu pentru traversarea evenimentului - pentru a compensa funcția handlerului de atașare IE addEvent (obj, evt, fn, captură) if (window.attachEvent) obj.attachEvent ("on" + evt, fn); altceva if (capture capture) capture = false; // capture obj.addEventListener (evt, fn, captură) // Verificați dacă nodul pe care ați făcut clic este o etichetă de ancorare. Dacă da, procedați ca de obicei. addEvent (ul, "faceți clic", funcția (e) // Firefox și IE accesează elementul țintă diferit: e.target și event.srcElement, respectiv var target = e? e.target: window.event.srcElement; dacă (target.nodeName.toLowerCase () === 'a') alertă ("clicked"); return false;);