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
, он не запомнит значение последнего установленного значения. Смотри эту скрипку.
Подводя итог, можно сказать, что в вашем коде вы отменяете распространение каждый раз после каждого клика. Вы должны ввести некоторые критерии в функцию, чтобы определить, следует ли отменить распространение вверх по иерархии элементов.