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

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

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

РЕДАКТИРОВАТЬ:

Проблема в том, что JS запоминает, если вы нажмете на "объект", а затем остановите "Event 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;
    }
}

ОБНОВЛЕНИЕ: Имейте в виду, что в вашем текущем коде, if (e && e.stopPropagation) всегда будет верно, если браузер поддерживает stopPropagation, Если это входит во вторую скобку для cancelBubble, он не запомнит значение последнего установленного значения. Смотри эту скрипку.

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

Другие вопросы по тегам