Aquí está un ejemplo sencillo:
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);
});
La idea básica es que desea adjuntar un controlador de eventos para el documento y dejar que el cuadro del evento hasta el DOM. Luego, verifique la propiedad event.target
para ver si coincide con los criterios deseados (en este caso, solo que el id
del elemento).
Editar:
@shabunc descubrieron un problema bastante grande con mis eventos solution-- sobre elementos secundarios no se detectará correctamente. Una forma de solucionar este problema es mirar a elementos antecesores para ver si alguno ha especificado 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);
}
});
}
Siempre puede leer la fuente jQuery: p. Sin embargo, no estoy seguro de cuán lejos estaría del JS nativo, ya que estoy seguro de que dependerá en gran medida de sí mismo en ese punto (en términos de usar selectores y demás). – Corbin
Solo una nota: '.live()' está en desuso por mucho, mucho tiempo. Fue reemplazado por '.delegate()', que fue reemplazado por '.on()', así que use el último. Además, el último muestra la diferencia entre vincular y delegar, por lo que es posible que desee echar un vistazo. Lo más importante es verificar el objetivo del evento. – Tadeck
Esta respuesta de mina puede ayudar a http://stackoverflow.com/a/27373951/1385441 –