Курс обучения JavaScript: События
|
Автор: Артемьев Сергей Игоревич ICQ: 438856621 email: _spin_@bk.ru |
JavaScript поддерживает отслеживание некоторых изменений и действий пользователя на странице. Каждое такое изменение или действие порождает событие, которое программист может перехватить и выполнить какие-то необходимые действия. Примеры событий - клик мыши на элементе страницы, получение фокуса ввода элементом формы, окончание загрузки или выгрузки страницы.
Список событий, доступных в каждом отдельном браузере обычно можно узнать на сайте компании-разработчика или в справочной документации. Список основных обработчиков определён стандартом W3C, но каждый разработчик браузера волен добавлять обработчики по своему желанию. Например, событие onAbort поддерживается IE, но не является стандартным и не поддерживается браузерами Netscape.
В первых версиях браузеров Web-программисты могли оперировать лишь с небольшими наборами событий для каждого типа отображаемых элементов, но в последних версиях можно назначить события практически любому элементу страницы.
Наиболее популярные и полезные события перечислены в таблице:
| События форм и элементов страницы | |
| onchange() | Элемент теряет форкус ввода, а содержимое элемента изменилось за время, пока элемент был в фокусе. |
| onselect() | Какая-то часть текста внутри элемента становится выделеной. |
| ousubmit() | В форме нажата кнопка "Отправить", но отправка формы на сервер ещё не производилась. |
| События мыши | |
| onclick() | Произведён клик кнопкой мыши на элементе управления. Событие возникает после того, как кнопка мыши была отпущена. |
| onmousedown() | Нажата кнопка мыши. |
| onmousemove() | Указатель мыши движется внутри области отображения элемента. |
| onmouseout() | Указатель мыши вышел из области отображения элемента. |
| oumouseover() | Указатель мыши находится внутри области отображения элемента. |
| onmouseup() | Отжата кнопка мыши. |
| События окна (объект window) | |
| onblur() | Элемент управления теряет фокус ввода, т.е. курсор переходит к другому элементу. |
| onfocus() | Отображаемый элемент получил фокуса ввода. Для текстовых полей это событие означает, что курсор уже находится в данном элементе. |
| onload() | Завершена загрузка страницы. |
| onunload() | Производится выход из документа (закрытие или перенаправление страницы на другой адрес). |
| События клавиатуры | |
| onkeydown() | Нажата кнопки на клавиатуре. |
| onkeypress() | Кнопка на клавиатуре нажата и не отпускается дольше, чем интервал повторения. Длительность интервала повторения является системным параметром и зависит от настроек операционной системы пользователя. |
| onkeyup() | Отпущена ранее нажатая кнопка. |
Наряду со стандартными событиями компания Microsoft в своих браузерах IE версии 5.5 и выше ввела большое количество собственных событий, например oncut(), oncopy(), onselectstart() и т.п. Но если вы хотите, чтобы ваши скрипты одинаково хорошо работали во всех браузерах - старайтесь используйте только стандартный набор событий.
Чтобы при возникновении события выполнить какие-то действия, необходимо предварительно указать обработчик этого события. Это можно сделать двумя путями: программно или непосредственно в HTML-коде.
Пример программного добавления собятия onload():
<head>
<script type="text/javascript" language="javascript">
function initVariables()
{
alert('документ загружен');
retun true;
}
window.onload = initVariables;
</script>
</head>
А эта версия примера имеет такой же функционал, как предыдущая, но обработчик события добавляется средствами HTML:
<head>
<script type="text/javascript" language="javascript">
function initVariables()
{
alert('документ загружен');
retun true;
}
</script>
</head>
<body onload="initVariables();">
</body>
Аналогичным образом могут быть присвоены обработчики событий другим элементам (ссылкам, элементам списка, кнопкам и пр.).
Некоторые элементы уже имею встроенные обработчики по-умолчанию. Например, клик по кнопке типа "submit" отправляет форму на сервер, а клик по ссылке перенаправляет браузер по указанному адресу. Но иногда возникает необходимость отключить стандартный обработчик. Сделать это очень просто - достаточно в обработчике вернуть значение false или воспользоваться свойствами объекта event.
Рассмотрим пример - проверка значений полей формы перед отправкой. Например, у нас есть форма подписки на почтовые рассылки. Форма состоит из поля ввода, куда пользователь должен вписать свой email, и кнопки "Отправить" типа "submit". Нам необходимо создать скрипт, который будет проверять поле ввода на наличие текста и запрещать отправку формы, если пользователь ничего не ввёл.
<head>
<script type="text/javascript" language="javascript">
function checkForm(evt)
{
// получаем значение поля email
var value = document.getElementById("email").value;
// если значение отсутствует -
// предупреждаем пользователя и
// запрещаем отправку почты
if(!value)
{
alert('не указан email!');
return false;
}
// иначе просто разрешаем отправку формы
return true;
}
</script>
</head>
<body>
<form action="subsribe.php" method="get" onsubmit="return checkForm();">
<input type="text" name="email" id="email" /> <br />
<input type="submit" name="sbm" id="sbm" value="Подписаться" />
</form>
</body>
Этот скрипт вполне работоспособен, но не совсем корректен с точки зрения системы событий JavaScript. Правильные способы обработки и блокировки собятий мы рассмотрим в уроках этого раздела.