Estoy usando event.stopPropagation()
en mi aplicación. Sin embargo, ha aparecido un escenario en el que quiero que la propagación continúe como si nunca se hubiera llamado a la función antes mencionada. Entonces me estoy preguntando; ¿hay alguna forma de "reanudar" la propagación después de haber sido detenida? Sería terriblemente tedioso mover la única llamada al event.stopPropagation
a una docena de declaraciones condicionales separadas.Cómo deshacer event.stopPropagation en jQuery?
Respuesta
Una vez que la propagación se ha detenido, no se puede reanudar. Como solución, lo que puede hacer es establecer una variable, y sólo se detiene si esta variable es cierto:
var stop = false;
// do your logic here
if(stop){
event.stopPropagation();
}
Ponga la llamada event.stopPropagation()
dentro de su condición. Por ejemplo
$el.click(function(event) {
if (some_condition) {
event.stopPropagation()
// do stuff
}
else {
// do other stuff, without stopping propagation
}
});
Tedious puede ser, pero desafortunadamente stopPropagation es un interruptor de una sola dirección. Una vez detenido, no puede volver a encenderlo para el mismo evento.
No es una condición "a". Es un ** lote ** de condiciones. Citando a mí mismo: "Sería terriblemente tedioso mover una llamada a event.stopPropagation a una docena de sentencias condicionales separadas" – Hubro
Es tedioso, pero desafortunadamente 'stopPropagation' es un cambio de una sola dirección. Una vez detenido, no puede volver a encenderlo para el mismo evento. –
Ahora ** esa ** es la respuesta que estaba buscando. Como eso realmente responde mi pregunta, lo aceptaré si edita – Hubro
Sólo refactorizar el evento original como esto:
var refEvent = event.originalEvent;
refEvent.cancelBubble = false;
refEvent.defaultPrevented = false;
refEvent.returnValue = true;
refEvent.timeStamp = (new Date()).getTime();
if (event.target.dispatchEvent){
event.target.dispatchEvent(refEvent);
} else if (event.target.fireEvent) {
event.target.fireEvent(refEvent);
}
¿Puede proporcionar un ejemplo de funcionamiento de un evento detenido con e.stopPropagation() y luego reiniciarlo con su ejemplo anterior? No pude hacer que funcionara, pero se ve bien en teoría. – gfullam
Aquí es una solución que funciona:
$('#mydiv').on('click.new', function(e){
e.stopImmediatePropagation();
alert('this will happen only once');
$('#mydiv').unbind('click.new');
});
Hace uso del hecho de que el evento puede tener un espacio de nombres personalizado, y puede desvincularse en consecuencia. También funciona para e.stopPropagation
. Para el caso, puede deshacer cualquier cosa asociada con ese evento de clic personalizado.
- 1. JQuery event.stopPropagation() no funciona
- 2. jQuery AJAX "Deshacer ayuda"
- 3. jQuery cómo deshacer un cambio de selección
- 4. Cómo deshacer '&' en Jade
- 5. Jquery Deshacer el último cambio a DOM
- 6. ¿Cómo deshacer el atributo de identificación con jQuery?
- 7. ¿Cómo creo "deshacer" en C++?
- 8. Deshacer
- 9. Cómo deshacer bzr add
- 10. Cómo deshacer `hg pull`?
- 11. cómo deshacer commit
- 12. ¿Cómo funciona Deshacer?
- 13. Deshacer en Vinculaciones WPF
- 14. ¿Cómo se puede deshacer "surroundContents" en javascript?
- 15. ¿Cómo puedo deshacer un objeto en Perl?
- 16. ¿Cómo puedo deshacer "Resolver" en TortoiseGit?
- 17. ¿Cómo puedo deshacer una sesión en ScalaQuery?
- 18. Cómo deshacer la cadena Unicode en C#
- 19. ¿Cómo obtengo deshacer fino en Vim?
- 20. Cómo: deshacer la variable en C#?
- 21. Git: Cómo "deshacer" una fusión
- 22. Cómo deshacer un Git rollback
- 23. TortoiseSVN - Cómo deshacer una reversión
- 24. Deshacer en Subversion
- 25. Deshacer eliminar en GIT
- 26. Deshacer/Rehacer en WPF?
- 27. ¿Cómo deshacer git update-index?
- 28. Cómo deshacer la actualización RequestFactory
- 29. JAXB: ¿cómo deshacer este XML?
- 30. ¿Cómo crear una matriz observable con deshacer?
Mmmm ... http: //stackoverflow.com/questions/4735006/javascript-how-to-enable-stoppropagation – elclanrs
Si existiera tal facilidad, ¿no necesitaría una docena de declaraciones condicionales para decidir si debería? invocarlo? – Jon
Ellos ya están allí. Habría una llamada a 'event.stopPropagation()' y (raramente) una llamada al hipotético 'event.resumePropagation()'. Eso sería preferible a llamar a 'event.stopPropagation()' en todos los condicionales excepto uno – Hubro