Javascript: Как включить StopPropagation? - PullRequest
14 голосов
/ 19 января 2011

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

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

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

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

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

1 Ответ

26 голосов
/ 19 января 2011

Это значение не запоминается вообще. Событие 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, он не запомнит последнее установленное значение. Смотрите эту скрипку .

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

...