Книга: JavaScript. Подробное руководство, 6-е издание
17.3.7. Отмена событий
17.3.7. Отмена событий
В разделе 17.3.4 говорилось, что значение, возвращаемое обработчиком события, зарегистрированным как свойство, можно использовать для отмены действий, выполняемых броузером по умолчанию в случае этого события. В броузерах, поддерживающих метод addEventListener(),
отменить выполнение действий по умолчанию можно также вызовом метода рreventDefault()
объекта события. Однако в IE, версии 8 и ниже, тот же эффект достигается установкой свойства returnValue
объекта события в значение false. В следующем фрагменте демонстрируется обработчик вымышленного события, который использует все три способа отмены события:
function cancelHandler(event) {
var event = event || window.event; // Для IE
/* Здесь выполняется обработка события */
// Теперь отменить действие по умолчанию, связанное с событием
if (event.preventDefault) event.preventDefault(); // Стандартный прием
if (event.returnValue) event.returnValue = false; // IE
return false; // Для обработчиков, зарегистрированных как свойства
}
Текущий проект модуля «DOM Events» определяет в объекте Event свойство с именем defaultPrevented
. Оно пока поддерживается не всеми броузерами, но суть его в том, что при обычных условиях оно имеет значение false и принимает значение true только в случае вызова метода preventDefault().
[46]
Отмена действий, по умолчанию связанных с событием, - это лишь одна из разновидностей отмены события. Имеется также возможность остановить распространение события. В броузерах, поддерживающих метод addEventListener(),
объект события имеет метод stopPropagation(),
вызов которого прерывает дальнейшее распространение события. Если в том же целевом объекте будут зарегистрированы другие обработчики этого события, то остальные обработчики все равно будут вызваны, но никакие другие обработчики событий в других объекта не будут вызваны после вызова метода stopPropagation().
Метод stopPropagation()
можно вызвать в любой момент в ходе распространения события. Он действует и в фазе перехвата, и в вызове обработчика целевого объекта, и в фазе всплытия.
В IE версии 8 и ниже метод stopPropagation()
не поддерживается. Вместо этого объект события в IE имеет свойство cancelBubble
. Установка этого свойства в значение true предотвращает распространение события. (В IE версии 8 и ниже фаза перехвата не поддерживается, поэтому отменить событие можно только в фазе всплытия.)
Текущий проект спецификации «DOM Events» определяет в объекте Event
еще один метод - метод с именем stopImmediatePropagation().
Подобно методу stopPropagation(),
он предотвращает распространение события по любым другим объектам. Но кроме того, он также предотвращает вызов любых других обработчиков событий, зарегистрированных в том же объекте. На момент написания этих строк метод stopImmediatePropagation()
поддерживался не во всех броузерах. Некоторые библиотеки, такие как jQuery и YUI, определяют свою, переносимую, версию метода stopImmediatePropagation()
.
- Безопасная отмена выполнения потоков
- 17.3. Вызов обработчиков событий
- Отмена права предоставлять привилегии
- 17.3.6. Распространение событий
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Асинхронный сервер и отмена выполняющихся запросов
- Расширение механизма событий
- Отмена ошибочных действий
- Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий
- Применение событий
- Рекомендации по обработке событий в среде .NET Framework
- Visual Studio .NET автоматически создаст и свяжет с кнопкой пустой обработчик событий