No recuerda el valor en absoluto. El evento e
es nuevo cada vez que se dispara onclick
. El problema es que estés siempre cancelando el burbujeo de eventos:
if(foo) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
e.stopPropagation
es el método W3C de prevenir la propagación de eventos.
e.cancelBubble
es el método de Microsoft para evitar el burbujeo de eventos.
Ambos son lo mismo. Así que estás cancelando el burbujeo de eventos todo el tiempo. Más lectura here.
Tendrá que cambiar su método de modo que sólo se cancela el burbujeo si se cumplen sus requisitos:
document.getElementById("object").onclick = function(e) {
if(e && e.stopPropagation && someCriteriaToStopBubbling === true)
{
e.stopPropagation();
}
else if (someCriteriaToStopBubbling === true)
{
e = window.event;
e.cancelBubble = true;
}
}
ACTUALIZACIÓN: tener en cuenta que en su código actual, if (e && e.stopPropagation)
siempre habrá cierto si el navegador es compatible con stopPropagation
. Si entra en el segundo corsé para cancelBubble
, no recordará el último valor establecido. Ver this fiddle.
Básicamente, para resumir, en su código está cancelando la propagación cada vez después de cada clic. Debe establecer algunos criterios en la función para determinar si se cancela o no la propagación en la jerarquía de elementos.
¿Puede agregar algo más de información, es decir, qué intenta lograr? No veo la necesidad de tener que iniciarlo nunca más si llamaste a Stop. – GenericTypeTea
He editado la pregunta @GenericTypeTea – Adam
Cuando dice "incluso después de que no lo quiera", ¿en qué circunstancias no lo quiere? Necesita configurar alguna variable para representar esas circunstancias, luego verifique esa variable en el controlador. Sería útil si publicara su código en lugar de optar por otra solución. – Kelvin