Это значение не запоминается вообще. Событие e
является новым каждый раз, когда срабатывает onclick
. Проблема в том, что вы всегда отменяете всплывающее событие:
if(foo) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
e.stopPropagation
- метод W3C
предотвращения пузырей событий.
e.cancelBubble
является Microsoft
метод предотвращения всплытия событий.
Они оба одинаковы. Таким образом, вы отменяете переплетение событий каждый раз. Больше чтения здесь .
Вам нужно будет изменить свой метод, чтобы он отменял образование пузырьков только при соблюдении ваших критериев:
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:
Помните, что в вашем текущем коде if (e && e.stopPropagation)
всегда будет истинным, если браузер поддерживает stopPropagation
. Если он входит во вторую скобку для cancelBubble
, он не запомнит последнее установленное значение. Смотрите эту скрипку .
Подводя итог, можно сказать, что в вашем коде вы отменяете распространение каждый раз после каждого клика. Вы должны ввести некоторые критерии в функцию, чтобы определить, следует ли отменить распространение вверх по иерархии элементов.