Javascript: как включить stopPropagation?

С object.stopPropagation() Я могу остановить пузырьки событий, но как я могу его снова включить?

Есть ли предварительно определенная функция в js что-то вроде object.startPropagation?

EDIT:

Проблема в том, что JS помнит, если вы нажмете на "объект", чем остановите событие Bubbling всегда даже после того, как я этого не хочу, поэтому я хотел бы остановить его:

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

Ответы

Ответ 1

Он не помнит значения вообще. Событие 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) всегда будет true, если браузер поддерживает stopPropagation. Если он войдет во вторую скобку для cancelBubble, он не запомнит значение последнего установленного значения. См. эту скрипту.

В основном, чтобы суммировать, в вашем коде вы отменяете распространение каждый раз после каждого нажатия. Вы должны указать некоторые критерии в функцию, чтобы определить, следует ли отменять распространение иерархии элементов.