This commit is contained in:
Ilya Kantor 2015-04-12 23:26:21 +03:00
parent 051b6b43c3
commit 470c0c9b13
4 changed files with 24 additions and 14 deletions

View file

@ -50,13 +50,15 @@ var event = new Event(тип события[, флаги]);
На сгенерированном событии, как и на встроенном браузерном, обработчик может вызвать метод `event.preventDefault()`. Тогда `dispatchEvent` возвратит `false`.
Остановимся здесь подробнее. Обычно такой вызов предотвращает действие браузера. В случае, если событие придумано нами -- никакого действия браузера, конечно, нет, но код, который генерирует событие, может быть заинтересован узнать, что его "отменили" и не продолжать свои действия.
Остановимся здесь подробнее. Обычно `preventDefault()` вызов предотвращает действие браузера. В случае, если событие придумано нами, имеет нестандартное имя -- никакого действия браузера, конечно, нет.
Иначе говоря, `event.preventDefault()` является возможностью для обработчика сообщить в сгенерировавший событие код, что некие действия продолжать не надо.
Но код, который генерирует событие, может предусматривать какие-то ещё действия после `dispatchEvent`.
В примере ниже функция `hide()` генерирует событие `hide` на элементе `#rabbit`, уведомляя всех интересующихся, что кролик собирается спрятаться.
Вызов `event.preventDefault()` является возможностью для обработчика событие сообщить в сгенерировавший событие код, что эти действия продолжать не надо.
И, если никакой обработчик не отменит действие по умолчанию, то кролик действительно исчезнет:
В примере ниже есть функция `hide()`, которая при вызове генерирует событие `hide` на элементе `#rabbit`, уведомляя всех интересующихся, что кролик собирается спрятаться.
Любой обработчик может узнать об этом, подписавшись на событие через `rabbit.addEventListener('hide',...)` и, при желании, отменить действие по умолчанию через `event.preventDefault()`. Тогда кролик не исчезнет:
```html
<!--+ run -->
@ -70,15 +72,13 @@ var event = new Event(тип события[, флаги]);
<script>
// прячемся через 2 секунды
setTimeout(hide, 2000);
function hide() {
var event = new Event("hide", {
cancelable: true
});
if (!rabbit.dispatchEvent(event)) {
alert( 'действие отменено' );
alert( 'действие отменено обработчиком' );
} else {
rabbit.hidden = true;
}
@ -89,6 +89,10 @@ var event = new Event(тип события[, флаги]);
event.preventDefault();
}
});
// прячемся через 2 секунды
setTimeout(hide, 2000);
</script>
```