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.
Puoi aggiungere ulteriori informazioni, ad esempio, cosa stai cercando di ottenere. Non riesco a vedere il bisogno di avviarlo se hai chiamato stop. – GenericTypeTea
Ho modificato la domanda @GenericTypeTea – Adam
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