2011-01-19 19 views
14

Con object.stopPropagation() puedo detener el evento de borboteo, pero ¿cómo puedo volver a habilitarlo?Javascript: ¿Cómo habilitar stopPropagation?

¿Hay una función predefinida en js algo así como object.startPropagation?

EDIT:

El problema es que la JS recuerda si hace clic en el "objeto" que deje de burbujear evento siempre, incluso después de que no quiero, así que me gustaría detenerlo:

document.getElementById("object").onclick = function(e){ 
    if(e && e.stopPropagation) { 
     e.stopPropagation(); 
    } else { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 
+0

¿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

+0

He editado la pregunta @GenericTypeTea – Adam

+0

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

Respuesta

25

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.

+0

Lo probé y lo recuerdo, la cancelación de burbujas de eventos es dentro de una función lo que dispara otro evento. Y cuando hago clic en el otro objeto, el evento de burbujeo todavía se cancela y también pongo una alerta dentro de la función y funciona porque recuerda que si haces clic en "objeto" después de iniciar la función, pero yo no inicié la función principal función de la función de burbujeo del evento, tal vez no entiendo algo, pero esto es lo que experimento aquí :). Pero tu solución es correcta. Puedo poner algunas declaraciones IF ELSE allí y espero que funcione :) – Adam

+0

@CIRK - Estás haciendo algo mal, porque ** no ** lo recuerda, a menos que estés haciendo algún otro código a lo que has provisto Vea aquí: http://jsfiddle.net/DgwSA/. Cada vez que haga clic en el botón en ese ejemplo, cancelBubble siempre será falso. He agregado una actualización para intentar que tus errores sean más obvios para ti. – GenericTypeTea

+0

Mira esto -> http://jsfiddle.net/DgwSA/1/ El onclick se cambia y la burbuja de cancelación también, sin embargo, si alertas e.cancelbubble te darán falso, pero en mi proyecto también detuve el manejo del evento. – Adam

Cuestiones relacionadas