Подтвердить что ты не робот

В событии javascript, как определить stopPropagation()?

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

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

4b9b3361

Ответ 1

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

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

var overriddenStop =  Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
    this.isPropagationStopped = true;
    overriddenStop.apply(this, arguments);
}

Ответ 2

Нет, нет.

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

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

isPropagationStopped: returnFalse

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

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

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

Ответ 3

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

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

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