javascript - change - modificar los datos del evento durante la propagación
title css (3)
¿Hay alguna forma de adjuntar datos a un objeto de evento jQuery a medida que se propaga por el DOM?
Para aclarar, si tiene tres divs anidados, cada uno con un clic en un detector de eventos, entonces al hacer clic en el div interno se obtienen los tres manejadores desde el más interno al más externo (propagación del evento 101). Lo que me gustaría hacer es agregar algunos datos al objeto del evento en cada controlador accesible desde la siguiente capa. ¿Cómo puedo hacer eso?
Gracias.
Aunque no puede adjuntar datos directamente al evento, aún puede adjuntar datos a targetElement
través de los data()
de jQuery data()
:
$(''div'').click(function(e) {
var info = $(e.target).data(''info'') || '''';
$(e.target).data(''info'', info + '' '' + $(this).attr(''class''));
});
Aquí está el violín: http://jsfiddle.net/eKVmU/
El objeto de evento que pasa jQuery es un contenedor alrededor del objeto de evento nativo. El borboteo ocurre en el nivel de javascript / navegador y, por lo tanto, el objeto de evento nativo parece estar compartido entre todos los controladores de eventos.
$(''div'').click(function(e) {
e.originalEvent.attribute = (e.originalEvent.attribute || "") +
" " + $(this).prop("className");
alert(e.originalEvent.attribute);
});
Probado en Chrome, Firefox, Safari, IE9 e IE10. Si prueba en otros navegadores, coméntenos los resultados.
Aquí está el violín: http://jsfiddle.net/5AQqD/
Tal vez he entendido mal la pregunta, pero me encontré con esta página de mientras buscaba la manera de hacer lo mismo.
Desde entonces, he descubierto que puede devolver los valores / valores que desea pasar al final de cada controlador y luego acceder a ellos en los controladores posteriores utilizando la propiedad event.result
.
Demostración simple en http://api.jquery.com/event.result/