2011-01-19 13 views
14

Con object.stopPropagation() Posso interrompere il bubbling degli eventi, ma come posso riattivarlo?Javascript: Come abilitare stopPropagation?

Esiste una funzione predefinita in js, ad esempio object.startPropagation?

EDIT:

Il problema è che il JS ricorda se si clicca su ' "oggetto" di smettere di evento di bubbling sempre anche dopo che non lo voglio, quindi mi piacerebbe fermarlo:

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

Puoi aggiungere ulteriori informazioni, ad esempio, cosa stai cercando di ottenere. Non riesco a vedere il bisogno di avviarlo se hai chiamato stop. – GenericTypeTea

+0

Ho modificato la domanda @GenericTypeTea – Adam

+0

Quando dici "anche dopo non lo voglio", in quali circostanze non lo vuoi? È necessario impostare alcune variabili per rappresentare tali circostanze, quindi controllare quella variabile nel gestore. Sarebbe utile se in realtà hai pubblicato il tuo codice anziché optare per un'altra soluzione. – Kelvin

risposta

25

Non ricorda il valore. L'evento e è nuovo ogni volta che viene attivato onclick. Il problema è che sei sempre annullando la spumeggiante evento:

if(foo) { 
    e.stopPropagation(); 
} else { 
    e.cancelBubble = true; 
} 
  • e.stopPropagation è il metodo W3C di prevenire bubbling degli eventi.
  • e.cancelBubble è il metodo Microsoft per impedire il bubbling degli eventi.

Sono tutti uguali. Quindi stai cancellando ogni volta bubbling di eventi. Altre informazioni here.

Avrai bisogno di cambiare il metodo in modo che solo annulla spumeggiante la conformità ai vostri criteri:

document.getElementById("object").onclick = function(e) { 

    if(e && e.stopPropagation && someCriteriaToStopBubbling === true) 
    { 
     e.stopPropagation(); 
    } 
    else if (someCriteriaToStopBubbling === true) 
    { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 

UPDATE: Tenete a mente che nel codice attuale, if (e && e.stopPropagation) sarà sempre vero se il browser supporta stopPropagation. Se entra nella seconda parentesi per cancelBubble, non ricorderà il valore impostato per ultimo. Vedi this fiddle.

In sostanza, per riepilogare, nel codice si annulla la propagazione ogni volta dopo ogni clic. È necessario inserire alcuni criteri nella funzione per determinare se annullare o meno la propagazione sulla gerarchia degli elementi.

+0

L'ho provato e si ricorda, L'annullamento della bolla evento si trova all'interno di una funzione che viene attivata da un altro evento. E quando clicco sull'altro oggetto l'evento bubbling è ancora cancellato e inserisco anche un avviso all'interno della funzione e funziona perché ricorda che se si fa clic su "oggetto" anziché avviare la funzione, ma non ho avviato il genitore funzione della funzione bubbling dell'evento, forse non capisco qualcosa ma questo è quello che provo qui :). Ma la tua soluzione è corretta Posso inserire alcune dichiarazioni IF ELSE lì e spero che funzionerà :) – Adam

+0

@CIRK - Stai facendo qualcosa di sbagliato, perché fa ** non ** ricorda, a meno che tu non stia facendo del codice altro a ciò che hai fornito. Vedi qui: http://jsfiddle.net/DgwSA/. Ogni volta che fai clic sul pulsante in quell'esempio cancelBubble sarà sempre falso. Ho aggiunto un aggiornamento per provare a rendere i tuoi errori più ovvi per te. – GenericTypeTea

+0

Controlla questo -> http://jsfiddle.net/DgwSA/1/ L'onclick è stato modificato e anche la bolla di annullamento, tuttavia se avvisi e.cancelbubble ti darà false, ma nel mio progetto ha interrotto anche la gestione degli eventi. – Adam