¿Alguien me puede explicar por qué hay una diferencia en el orden en que se están ejecutando los controladores de eventos dependiendo de cómo se han adjuntado? En el siguiente ejemplo estoy usando los métodos .on()
y .addEventListener()
para manejar un evento específico en diferentes elementos DOM
.jQuery .on(); vs JavaScript .addEventListener();
jsFiddle: http://jsfiddle.net/etsS2/
pensé que en este ejemplo particular, el orden en que los controladores de eventos va a ser ejecutado dependerá de la event-bubbling
- por lo que a partir del evento original target
y ascender a la document
elemento.
document.getElementById('outer').addEventListener('mouseup', function (event) {
//$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
Si Descomentar la versión on();
todo funciona como se esperaba - ¿Existe una diferencia en la forma jQuery
maneja sucesos contrarios a la llanura JavaScript
?
'return false' también hace' event.preventDefault() 'así como' event.stopPropagation() 'en un manejador de eventos jQuery. – Jasper
La razón por la que he creado esta estructura se debe al hecho de que el elemento 'a.link' se agrega dinámicamente y de alguna manera tengo que evitar que el div' externo' se ocupe de ese evento en particular, ¿cómo puedo lograr eso? Entonces, básicamente, quiere decir que esto: $ (documento) .on ('mouseup', 'a.link' ...) es igual a esto: $ ('a.link'). Live ('mouseup', ...)? – MonkeyCoder
Sí, la única forma en que un mecanismo como '.live()', '.delegate()', o el nuevo '.on()' puede funcionar es por burbujeo, y el burbujeo funciona desde adentro hacia afuera. En su lugar, podría asegurarse de que los detectores de eventos para los elementos añadidos dinámicamente se vinculen directamente a los elementos cuando se agregan al DOM. – Pointy