Ecco un semplice esempio:
function live(eventType, elementId, cb) {
document.addEventListener(eventType, function (event) {
if (event.target.id === elementId) {
cb.call(event.target, event);
}
});
}
live("click", "test", function (event) {
alert(this.id);
});
L'idea di base è che si desidera collegare un gestore di eventi per il documento e lasciare che la bolla dell'evento il DOM. Quindi, controlla la proprietà event.target
per vedere se soddisfa i criteri desiderati (in questo caso, solo che l'elemento id
).
Edit:
@shabunc scoperto un abbastanza grande problema con i miei eventi solution-- su elementi bambino non sarà rilevato correttamente. Un modo per risolvere questo problema è quello di esaminare gli elementi antenati per vedere se hanno specificato id
:
function live (eventType, elementId, cb) {
document.addEventListener(eventType, function (event) {
var el = event.target
, found;
while (el && !(found = el.id === elementId)) {
el = el.parentElement;
}
if (found) {
cb.call(el, event);
}
});
}
fonte
2012-02-02 02:33:38
Si può sempre leggere la fonte jQuery: p. Non sono sicuro di quanto sarebbe lontano dal JS nativo, dal momento che sono sicuro che dipenderà molto da sé da quel punto (in termini di utilizzo di selettori e quant'altro). – Corbin
Solo una nota: '.live()' è deprecato per molto, molto tempo. È stato sostituito da '.delegate()', che è stato sostituito da '.on()', quindi per favore usa l'ultimo. Inoltre, l'ultimo mostra la differenza tra l'associazione e la delega, quindi potresti voler dare un'occhiata. Il più importante è il controllo dell'evento target. – Tadeck
Questa mia risposta può aiutare http://stackoverflow.com/a/27373951/1385441 –