Aquí es una jsFiddle usando POJS que muestran que return false;
no impide la propagación del evento: http://jsfiddle.net/Ralt/Lz2Pw/¿Por qué devolver la falsificación detener la propagación con jQuery mientras que no con POJS?
Aquí está otra usando jQuery mostrando que return false;
hace detener la propagación del evento: http://jsfiddle.net/Ralt/D5Mtg/
Editar: El uno que me explica por qué jQuery hace esto - difiriendo intencionalmente del comportamiento original - (y dónde en el código) obtiene la respuesta.
Aquí está el código (largo, pero muy fácil de leer):
HTML para ambas versiones:
<div id="parent1"> <div id="child1"><a href="#" id="a1">child1</a></div> </div> <div id="parent2"> <div id="child2"><a href="#" id="a2">child2</a></div> </div> <div id="parent3"> <div id="child3"><a href="#" id="a3">child3</a></div> </div>
POJS:
document.getElementById('child1').onclick = function(e) { console.log('child1'); e.preventDefault(); }; document.getElementById('parent1').onclick = function(e) { console.log('parent1'); }; document.getElementById('child2').onclick = function(e) { console.log('child2'); return false; }; document.getElementById('parent2').onclick = function(e) { console.log('parent2'); }; document.getElementById('child3').onclick = function(e) { console.log('child3'); e.stopPropagation(); }; document.getElementById('parent3').onclick = function(e) { console.log('parent3'); };
versión de jQuery :
$('#child1').click(function(e) { console.log('child1'); e.preventDefault(); }); $('#parent1').click(function(e) { console.log('parent1'); }); $('#child2').click(function(e) { console.log('child2'); return false; }); $('#parent2').click(function(e) { console.log('parent2'); }); $('#child3').click(function(e) { console.log('child3'); e.stopPropagation(); }); $('#parent3').click(function(e) { console.log('parent3'); });
Me pregunto si el retorno falso está siendo recogido por el manejo de eventos de jQuery y detiene la propagación allí ... –
Si es así, me gustaría ver dónde :-) Además, ¿por qué estaría haciendo esto? –
Ah, esto podría ser. Vaya a la fuente jQuery (http://code.jquery.com/jquery-1.7.2.js), busque 'event.stopPropagation', esto ocurre justo después de una condición que comprueba si el valor devuelto es falso. –