в событии javascript, как определить, что stopPropagation () был вызван? - PullRequest
11 голосов
/ 31 августа 2011

Если вызывается e.preventDefault(), можно увидеть отражение в методе e.defaultPrevented.

Существует ли подобное свойство для e.stopPropagation()?Если нет, то как определить?

Ответы [ 3 ]

7 голосов
/ 31 августа 2011

Я не просматривал jQuery, чтобы увидеть их метод, но, похоже, вы можете переопределить метод stopPropagation для базового Event объекта, установить флаг и затем вызвать переопределенный метод.

Что-то вроде:

var overriddenStop =  Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
    this.isPropagationStopped = true;
    overriddenStop.apply(this, arguments);
}
5 голосов
/ 31 августа 2011

Нет, нет.

Могу сказать, потому что метод jQuery isPropagationStopped() не использует внутренний интерфейс браузера, а реализует эту функцию вручную.(Если бы в браузерах была такая функция - встроенная - jQuery использовал бы ее вместо того, чтобы делать это вручную.)

Таким образом, в jQuery новый объект события получит это свойство (унаследованное):

isPropagationStopped: returnFalse

и затем, когда вы вызываете stopPropagation() для этого объекта события, jQuery вручную изменит это свойство:

stopPropagation: function() {
    this.isPropagationStopped = returnTrue;
    ...
}

returnFalse и returnTrue - это функции, которые возвращают false и true соответственно.

0 голосов
/ 31 августа 2011

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

Тем не менее, вы можете просто следить за этим самостоятельно. Из-за природы этого вы нигде не сможете проверить его, кроме как в том же обработчике, который останавливает сам процесс распространения (событие не будет пузыриться, больше обработчиков не будет вызываться), поэтому я могу не представляю ситуацию, когда это будет необходимо. Что ты пытаешься сделать?

Редактировать: Сначала я думал, что вы используете jQuery. Для тех, кто: Вы можете использовать метод e.isPropagationStopped(), который будет проверять, было ли остановлено распространение из jQuery. Если проповедь изначально остановлена, об этом не скажешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...