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

Перехват события.

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

<html>

<head>

<script language="JavaScript">

window.captureEvents(Event.CLICK);

window.onclick= handle;

function handle(e) {

alert("Объект window перехватывает это событие!");

return true; // т.е. проследить ссылку

}

</script>

</head>

<body>

<a href="test.htm">Click on this link</a>

</body>

</html>

Как видно, мы не указываем программы обработки событий в тэге <a>. Вместо этого пишем window.capture Events (Event.CLICK);с тем, чтобы перехватить событие Click объектом window. Если же Вы хотите пере­хватывать несколько событий, то Вам следует отделить их друг от друга символами |. Например:

window.captureEvents(Event.CLICK | Event.MOVE);

Помимо этого в функции handle(), назначенной на роль обработчика событий, мы пользуемся инструкцией return true;. В действительности это означает, что браузер должен обработать и саму ссылку, после того, как завершится выполнение функции handle(). Если же Вы напишете вместо этого return false;, то на этом все и закончится.

Если теперь в тэге <a> Вы зададите программу обработки события onClick, то поймете, что данная программа при возникновении данного события вызвана уже не будет. И это не удивительно, поскольку объект window перехватывает сигнал о событии еще до того, как он достигает объекта link. Если же Вы определите функцию handle() как

function handle(e) {

alert("The window object captured this event!");

window.routeEvent(e);

return true;

}

то компьютер будет проверять, определены ли другие программы обработки событий для данного объекта. Переменная e - это наш объект Event, передаваемый функции обработки событий в виде аргумента.

Кроме того, Вы можете непосредственно послать сигнал о событии какому-либо объекту. Для этого Вы можете воспользоваться методом handleEvent(). Это выглядит следующим образом:

<html>

<script >

window.captureEvents(Event.CLICK);

window.onclick= handle;

function handle(e) {

document.links[1].handleEvent(e);

}

</script>

<a href="test.htm">"Кликните" по этой ссылке</a><br>

<a href="test.htm"

onClick="alert('Обработчик событий для второй ссылки!');">Вторая ссылка</a>

</html>

Все сигналы о событиях Click, посылаются на обработку по второй ссылке - даже если Вы вовсе и не щелкнули ни по одной из ссылок!

Следующий скрипт демонстрирует, как скрипт может реагировать на сигналы о нажатии клавиш.

<html>

<script >

window.captureEvents(Event.KEYPRESS);

window.onkeypress= pressed;

function pressed(e) {

alert("Key pressed! ASCII-value: " + e.which);

}

</script>

</html>

Методы addEventListener, removeEventListener, attachEvent.

Еще одна возможность обработки событий состоит в использовании методов addEventListener (событие, обработчик события, этап события) и removeEventListener (событие, обработчик события, этап события). С помощью этих методов обработчик события можно задать или отменить для любого DOM-элемента в самом скрипте без назначение атрибута on + "событие". Здесь 1-й параметр – это событие без префикса "on" ("click", "mousemove", "blur", "load" ...), 2-й параметр – обработчик события, функция которая будет выполняться при события указанной в первом параметре, 3-й параметр – этап события. Если false, то обработчик события будет выполняться на этапе всплытия события (если существуют вложении элементы с тем же обработчиком события), если true - то на этапе перехвата события.

<p id="test">Тест</p>

<script type="text/javascript">

function alerting(){alert('Тест')};

var test=document.getElementById('test');

test.addEventListener('click',alerting,false);

</script>

IE не поддерживает addEventListener () и removeEventListener (), у него есть аналогичные: attachEvent (on + событие, обработчик события) и detachEvent (on + событие, обработчик события).

Для кроссбраузерной привязки обработчиков события надо делать перебор методов, используя операторы if...else:

<script type="text/javascript">

var test=document.getElementById('test');

function alerting(){alert('Тест')}

if(test.addEventListener){//код для всех браузеров

test.addEventListener("click",alerting,false)

}

else{//код для IE

test.attachEvent("onclick",alerting)

}

</script>

Следует заметить, что скрипт с методом addEventListener() оптимально прописывать в конце Html-документа или уже после загрузки всех необходимых для выполнения скрипта DOM-элементов. Можно также использовать метод загрузки скрипта после происшествия window.onload