Событие щелчок мыши - Свойство onclick и Атрибут onclick - Обработка событий в JavaScript
Что происходит в браузере, какие события?
или «щелчок левой кнопкой мыши» и другие.Javascript -код можно организовать таким образом, что при возникновении этих или других событий в окне браузера будут происходить определенные изменения.
То есть события в Javascript можно подвергнуть обработке (запрограммировать) так, как нам это удобно.
В качестве обработчика события используется какая-либо функция, которая совершает те или иные действия (обрабатывает событие) , и которая передается тому или иному объекту или свойству.
Например, чтобы определенная функция (обработчик события ) сработала после «полной загрузки страницы», ее необходимо передать объекту window через свойство onload . Объект window знает о том, что страница загружена. Об этом уже был разговор...
Или, чтобы какая-либо функция выполнялась после «щелчка левой кнопкой мыши» на нужном нам объекте (например, изображении ), необходимо эту функцию связать с этим объектом посредством свойства onclick , о котором преимущественно и будет идти речь далее...
1.
window .onload = back_gr;
back_gr (){} ;
Чтобы функция back_gr () (обработчик события) выполнялась после полной загрузки страницы, ее необходимо передать объекту window через свойство onload .
2.
image.onclick = change;
change (){} ;
Чтобы функция change () (обработчик события) выполнялась при щелчке левой кнопкой мыши на объекте image (например, изображение ), необходимо воспользоваться свойством onclick .
Рассмотрим пример :
На странице есть полупрозрачное изображение.
Нужно сделать так, чтобы при щелчке на нем левой кнопкой мыши оно становилось полноценным.
По сути, при возникновении события «щелчок мышью» на изображении - оно должно сменяться другим.
onclick - как свойство объекта - обработка событийСначала воспользуемся onclick как свойством объекта, для которого будет вызываться событие. В нашем случае объект - это изображение.
Для того чтобы обратиться к изображению, как к объекту воспользуемся методом getElementById .
/* 1. После полной загрузки страницы вызывается функция back_gr */
window.onload = back_gr;
/* 2. При щелчке на изображении мышью вызывается функция change */
function
back_gr(){
image.onclick = change;
}
/* 3. Функция change меняет одно изображение на другое */
function
change(){
var image = document.getElementById("img");
image.setAttribute("src"
,"img/peng.gif"
);
}
Обратите внимание : вернёмся к коду из предыдущего примера.
Посредством метода getElementById к тегу img идет обращение как к объекту image .
Далее при помощи метода setAttribute изменяется значение атрибута src
тега img
(объекта image
):
Функция back_gr() выполняется при щелчке на изображении левой кнопкой мыши.
Рассмотрим наиболее стандартные и часто используемые javaScript события:
a, area, button, input, |
Потеря текущим элементом фокуса. Возникает при |
|
Input, select, textarea |
Изменение значений элементов формы. Возникает после потерей элементом фокуса, т.е. после события blur |
|
Практически все |
Одинарный щелчок (нажата и отпущена кнопка мыши) |
|
a, area, button, input, label, select, textarea |
||
Практически все |
Нажата кнопка мыши в пределах текущего элемента |
|
Практически |
Курсор мыши выведен за пределы |
|
Практически все |
Курсор мыши наведен на текущий элемент |
|
Практически все |
Отпущена кнопка мыши в пределах текущего элемента |
|
Перемещение окна |
||
Изменение размеров окна |
||
Выделение текста в текущем элементе |
||
Отправка данных формы |
||
Попытка закрытия окна браузера и выгрузки документа |
Для выполнения следующего примера нам понадобится новое понятие — событие.
В нашем случае событие — это реакция программы на действие пользователя (щелчок мышью по кнопке, уменьшение мышкой окна браузера, ввод текста с клавиатуры и т.д.). С помощью программы у нас есть возможность отреагировать на любые действия пользователя.
Рассмотрим одно из самых распространенных событий — onload — которое происходит при загрузке документа (когда пользователь своими действиями вызвал загрузку веб-страницы).
Рассмотрим пример использования события javascript onload для изменения ширины и высоты элемента.
Пример:
Добавить на страницу изображение и при помощи javascript при наступлении события загрузки страницы сделать ширину изображения соответствующей ширине окна браузера.
✍ Решение:
function resizeImg() { var myImg= document.getElementById ("img1" ) ; myImg.style .width = document.body .clientWidth ; } ... |
function resizeImg(){ var myImg=document.getElementById("img1"); myImg.style.width=document.body.clientWidth; } ...
В примере основные действия происходят в функции resizeImg() :
Задание Js8_4.
Разместите в html-коде несколько изображений (тег img). Используя метод измените:
— размер (свойства width и height) всех изображений страницы
— размер границы (свойство border) всех изображений.
Дополните код:
var allImg=document...; // получаем массив изображений for (var i=0; i < allImg.length; i++){ allImg[i].....; // меняем свойство width ...; // меняем свойство height ...; // меняем border }
Событие onclick javaScript и три способа обработки событийСобытие onClick происходит во время одинарного щелчка кнопкой мыши
. Обычно для события назначается обработчик
, то есть функция, которая сработает, как только событие произошло. Обработать событие, т.е. отреагировать на него посредством скрипта, можно тремя способами. Рассмотрим их:
Пример: По щелчку на кнопке вывести диалоговое окно с сообщением «Ура!»
Скрипт:
В данном примере в html-коде мы видим кнопку. У кнопки присутствует атрибут onclick («по щелчку» ), в значении которого стоит вызов функции с названием message() . Это пользовательская функция, описанная выше в скрипте. В самой функции выводится диалоговое окно, что и задано согласно заданию.
Скрипт при такой обработке события обычно находится в области head документа
Это упрощенный вариант обработки события, он подходит только для небольшого кода, когда необходимо выполнить один-два оператора. Иначе код будет плохочитаемым.
В качестве атрибута кнопки указывается onclick («по щелчку»
), а в качестве значения пишется скрипт из операторов с указанием на каком языке он написан (javascript:). В нашем случае оператор для вывода модального окна со словом «Ура!»
html-код:
Скрипт:
document.myForm .myButton .onclick = message; function message() { alert("Ура!" ) ; } |
document.myForm.myButton.onclick = message; function message() { alert("Ура!"); }
В html-коде здесь присутствует кнопка с атрибутом id , который необходим для обращения к кнопке через скрипт.
В скрипте, который обязательно находится ниже дерева элементов (можно перед закрытием тега body), находится обращение к кнопке (document.myForm.myButton), для которой назначается обработчик события onclick со значением ссылки на функцию . Обращение к кнопке может быть организовано через атрибут id (document.getElementById("myButton").onclick = message;)
Скобки после названия функции message не ставятся. В данном случае это именно ссылка на функцию, иначе, при использовании скобок, функция была бы вызвана, а не назначена в качестве обработчика событий.
Именно такой способ обработки событий максимально приближен к тому, который происходит, например, в ОС windows.
Как лучше выводить результаты примеров?
Важно: При вызове document.write после окончания загрузки страницы (при обработке событий onclick , oninput , …), страница перезапишется, поэтому вызывать этот метод не рекомендуется . Для примеров лучше использовать метод alert() .
Рассмотрим все простые способы вывода отладочной информации :
document.innerHTML += "htmlstr"; // добавляет на страницу
console.log("str"); // выводит в консоль браузерах
Задание Js8_5. Выполните задание по инструкции:
function sayHello() { var userName= prompt("Как вас зовут?" ) ; if (userName) { alert(...) ; document.getElementById ("smileImg" ) . ...= ...; } } |
function sayHello() { var userName=prompt("Как вас зовут?"); if(userName){ alert(...); document.getElementById("smileImg"). ...=...; } }
=>>
Событие наступает при наведении (onMouseOver) на объект и при выведении (onMouseOut) за пределы объекта курсора мыши.
Назначение обработчика событий осуществляется точно таким же образом, как и в случае .
Поэтому выполним задание:
Задание Js8_6. По наведению курсора мыши на гиперссылки закрашивать задний фон страницы в разные цвета.
Дополните код:
Зеленый
… seagreen
… magenta
… purple
… navy
… royalblue
Задание Js8_7. Создание rollover-изображения
— Добавьте в код тег img с изображением.
— Введите обработчики событий onmouseover (по наведению) и onmouseout (при отведении). Сделайте это в виде функций.
— Присоедините к обработчику событий onmouseover процедуру загрузки в тег img другого изображения.
— Присоедините к обработчику событий onmouseout процедуру загрузки другого изображения в тег img .
В javascript можно назначать НЕСКОЛЬКО обработчиков одного и того же события. Для этого используются методы:
Синтаксис addEventListener :
У метода три аргумента:
Element.addEventListener(event, handler[, phase]);
function message() { alert("Ура!"); } var input = document.getElementById("MyElem"); input.addEventListener("click", message);
Синтаксис removeEventListener :
Методу следует передать те же аргументы, что были у addEventListener :
Element.removeEventListener(event, handler[, phase]);
Пример:
В предыдущем задании удалить добавленный обработчик с кнопки, используя метод removeEventListener
.
function message() { alert("Ура!"); } var input = document.getElementById("MyElem"); input.addEventListener("click", message); input.removeEventListener("click", message);
Всплытие и погружение события
obj.onevent = function(e) {/*...*/} // где e - объект события // e.target - элемент, на котором произошло событие
Обработка событий
Клиентские программы на языке JavaScript основаны на модели программирования, когда выполнение программы управляется событиями. При таком стиле программирования веб-браузер генерирует событие, когда с документом или некоторым его элементом что-то происходит. Например, веб-браузер генерирует событие, когда завершает загрузку документа, когда пользователь наводит указатель мыши на гиперссылку или нажимает клавишу на клавиатуре.
Если JavaScript-приложение интересует определенный тип события для определенного элемента документа, оно может зарегистрировать одну или более функций, которая будет вызываться при возникновении этого события. Имейте в виду, что это не является уникальной особенностью веб-программирования: все приложения с графическим интерфейсом пользователя действуют именно таким образом - они постоянно ожидают, пока что-то произойдет (т.е. ждут появления событий), и откликаются на происходящее.
Тип события - это строка, определяющая тип действия, вызвавшего событие. Тип «mousemove», например, означает, что пользователь переместил указатель мыши. Тип «keydown» означает, что была нажата клавиша на клавиатуре. А тип «load» означает, что завершилась загрузка документа (или какого-то другого ресурса) из сети. Поскольку тип события - это просто строка, его иногда называют именем события.
Цель события - это объект, в котором возникло событие или с которым это событие связано. Когда говорят о событии, обычно упоминают тип и цель события. Например, событие «load» объекта Window или событие «click» элемента . Самыми типичными целями событий в клиентских приложениях на языке JavaScript являются объекты Window, Document и Element, но некоторые типы событий могут происходить и в других типах объектов.
Обработчик события - это функция, которая обрабатывает, или откликается на событие. Приложения должны зарегистрировать свои функции обработчиков событий в веб-браузере, указав тип события и цель. Когда в указанном целевом объекте возникнет событие указанного типа, браузер вызовет обработчик. Когда обработчики событий вызываются для какого-то объекта, мы иногда говорим, что браузер «возбудил» или «сгенерировал» событие.
Объект события - это объект, связанный с определенным событием и содержащий информацию об этом событии. Объекты событий передаются функции обработчика события в виде аргумента (кроме IE8 и более ранних версий, где объект события доступен только в виде глобальной переменной event). Все объекты событий имеют свойство type , определяющее тип события, и свойство target , определяющее цель события.
Для каждого типа события в связанном объекте события определяется набор свойств. Например, объект, связанный с событиями от мыши, включает координаты указателя мыши, а объект, связанный с событиями от клавиатуры, содержит информацию о нажатой клавише и о нажатых клавишах-модификаторах. Для многих типов событий определяются только стандартные свойства, такие как type и target, и не передается никакой дополнительной полезной информации. Для таких типов событий важно само наличие происшествия события, и никакая другая информация не имеет значения.
Распространение события - это процесс, в ходе которого браузер решает, в каких объектах следует вызвать обработчики событий. В случае событий, предназначенных для единственного объекта (таких как событие «load» объекта Window), надобность в их распространении отсутствует. Однако, когда некоторое событие возникает в элементе документа, оно распространяется, или «всплывает», вверх по дереву документа.