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

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

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

EDIT:

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

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

1 ответов


он вообще не помнит значения. Событие e новое каждый раз onclick уволен. Проблема в том, что ты всегда отмена события bubbling:

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

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