Если вызывается e.preventDefault()
, можно увидеть отражение в методе e.defaultPrevented
.
Есть ли аналогичное свойство для e.stopPropagation()
? Если нет, как определить?
Если вызывается e.preventDefault()
, можно увидеть отражение в методе e.defaultPrevented
.
Есть ли аналогичное свойство для e.stopPropagation()
? Если нет, как определить?
Я не просматривал jQuery, чтобы увидеть их метод, но, похоже, вы можете переопределить метод stopPropagation на базовом объекте Event, установить флаг, а затем вызвать переопределенный метод.
Что-то вроде:
var overriddenStop = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
this.isPropagationStopped = true;
overriddenStop.apply(this, arguments);
}
Нет, нет.
Я могу сказать, потому что метод jQuery isPropagationStopped()
не использует API-интерфейс браузера внутри, но вместо этого реализует эту функцию вручную. (Если в браузерах была такая особенность, встроенный jQuery использовал бы это вместо того, чтобы делать это вручную.)
Итак, в jQuery новый объект события получит это свойство (унаследованное):
isPropagationStopped: returnFalse
а затем, когда вы вызываете stopPropagation()
в этом объекте события, jQuery вручную изменит это свойство:
stopPropagation: function() {
this.isPropagationStopped = returnTrue;
...
}
returnFalse
и returnTrue
- это функции, которые возвращают false
и true
соответственно.
В IE вы можете проверить свойство e.cancelBubble
, чтобы проверить на наличие остановок. Другие браузеры не имеют этой функции.
Однако вы можете просто следить за этим сами. Из-за его характера вы не сможете проверить его где-нибудь, кроме того же обработчика, который останавливает само распространение (событие не будет пузыриться, больше обработчиков не будет вызвано), поэтому я могу " Представьте себе ситуацию, в которой это было бы необходимо. Что вы пытаетесь сделать?
Изменить: я думал, что вы сначала используете jQuery. Для тех, кто:
Вы можете использовать метод e.isPropagationStopped()
, который будет проверять, было ли прекращено распространение из jQuery. Если пропаганда остановлена изначально, это не сможет сказать.