Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Konspekt_Kursa_JavaScript.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.51 Mб
Скачать

Вызов процедуры обработки события

В JavaScript каждое событие порождает ассоциированный с ним объект event. Этот объект содержит всю информацию о событии и его можно передать процедуре обработки события.

Вызов процедуры обработки события можно осуществить двумя способами:

  • явно – назначив ссылку на процедуру обработки события в соответствующем свойстве объекта

  • неявно – в атрибуте обработки события тега соответствующего элемента

Каждый объект JavaScript, создаваемый для элементов документа HTML, имеет свойства, ассоциированные с возможными событиями, которые могут быть сгенерированы для этого элемента. Присвоив этому свойству в качестве значения ссылку на процедуру обработки события, мы и определим процедуру, которая будет вызываться при возникновении соответствующего события. Например, следующий код определяет процедуру showEventType как процедуру обработки события mousedown кнопки формы:

<FORM NAME="form1">

<INPUT TYPE="button" NAME="button1" VALUE="Узнай событие">

<SCRIPT>

document.form1.button.onmousedown = showEventType

</SCRIPT>

</FORM>

Сама процедура задается следующим кодом (объект event в IE доступен просто по своему имени):

// В IE

function showEventType() {

alert("Произошло событие: " + event.type)

}

Второй, неявный вызов процедуры обработки события требует задания обращения к ней в атрибуте onmousedown в открывающем теге элемента INPUT:

<FORM NAME="form1">

<INPUT TYPE="button" NAME="button1" VALUE="Узнай событие"

onmousedown = "showEventType()" >

</FORM>

Событийная модель

Любое событие имеет свой "жизненный" цикл: от момента возникновения действия или условия, являющегося причиной генерирования события, до выполнения последнего оператора обработчика события или финальных действий браузера. Цикл жизни любого типичного события JavaScript включает следующие этапы:

  1. Происходит действие пользователя или возникает условие, которое возбуждает событие

  2. Тотчас же корректируется объект event, чтобы отразить параметры возникшего события

  3. Событие генерируется – это и есть истинное сообщение о возникшем событии

  4. Вызывается обработчик событий элемента-источника события, который выполняет определенные программистом действия и завершает свою работу

  5. Событие передается вверх по иерархии объектов (bubble up) и вызывается обработчик события объекта, являющегося родителем объекта-источника события. Это "всплытие" вверх по иерархии объектов продолжается, пока не будет достигнут самый верхний объект иерархии – объект window, или обработчик события какого-либо объекта не аннулирует событие

  6. Выполняются заключительные действия по умолчанию, если таковые определены, но при условии, что событие не было аннулировано.

Пример 19. "Всплытие" события

В этом примере щелчок на любом элементе HTML страницы приводит к отображению диалогового окна с надписью "Не надо щелкать".

<HTML>

<HEAD><TITLE>"Всплытие" события</TITLE>

</HEAD>

<BODY ID='body' onclick="alert('Не надо щелкать!');" >

<H1 ID='head1'>Привет!</H1>

<P ID='parag1'>Это простой пример, <B ID='bold1'>ну очень простой</B> пример.

</BODY>

</HTML>

Возникнув, событие начинает подниматься вверх по иерархии вложенных объектов HTML. Например, если щелчок произошел на элементе bold1, то путь "всплытия" события будет bold1, parag1 и body. Причем для каждого из указанных элементов JavaScript будет просматривать наличие атрибута onclick и выполнять действия, предопределенные его значением. В нашем случае такой атрибут задан только для родителя body, а поэтому только заданный в нем код и будет выполняться при щелчке на любом элементе или просто в теле документа.

Если к какому-нибудь элементу добавить собственный обработчик событий onclick, то будут выполнены две процедуры: самого элемента и элемента родителя. Если элемент расположен достаточно глубоко в иерархии объектов, и каждый элемент, расположенный выше него, имеет также собственный обработчик событий, то событие будет обрабатываться всеми обработчиками, если только в каком-то обработчике не будет аннулировано его "всплытие" вверх по иерархии объектов.

Объект event имеет свойство cancelBubble, которое позволяет аннулировать событие, если установить его значение равным true. После этого соответствующее событие не существует, и обработчики этого события всех, расположенных выше элементов, не вызываются.

Пример 20. Аннулирование "всплытия" события

Аннулирование "всплытия" события в элементе bold1 приводит к тому, что щелчок на нем не отображает диалогового окна из обработчика этого события в элементе body. Для всех остальных элементов это действие продолжает выполняться.

<HTML>

<HEAD><TITLE>Аннулирование события</TITLE>

</HEAD>

<BODY ID='body' onclick="alert('Не надо щелкать!');" >

<H1 ID='head1'>Привет!</H1>

<P ID='parag1'>Это простой пример,

<B ID='bold1' onclick="window.event.cancelBubble=true" >ну очень простой</B> пример.

</BODY>

</HTML>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]