JavaScript - Виды событий. Типы событий События dom javascript

Рассмотрим наиболее стандартные и часто используемые javaScript события:

Обработчик
события

Поддерживающие HTML- элементы и объекты

Описание

Получение элементом фокуса

a, area, button, input,
label, select, textarea

Потеря текущим элементом фокуса. Возникает при
щелчке мышью вне элемента либо нажатии клавиши табуляции

Input, select, textarea

Изменение значений элементов формы. Возникает после потерей элементом фокуса, т.е. после события blur

Практически все

Одинарный щелчок (нажата и отпущена кнопка мыши)

a, area, button, input, label, select, textarea

Практически все

Нажата кнопка мыши в пределах текущего элемента

Практически
все

Курсор мыши выведен за пределы
текущего элемента

Практически все

Курсор мыши наведен на текущий элемент

Практически все

Отпущена кнопка мыши в пределах текущего элемента

Перемещение окна

Изменение размеров окна

Выделение текста в текущем элементе

Отправка данных формы

Попытка закрытия окна браузера и выгрузки документа

Событие onLoad. Свойства высоты и ширины объекта в javaScript

Для выполнения следующего примера нам понадобится новое понятие — событие.

В нашем случае событие — это реакция программы на действие пользователя (щелчок мышью по кнопке, уменьшение мышкой окна браузера, ввод текста с клавиатуры и т.д.). С помощью программы у нас есть возможность отреагировать на любые действия пользователя.

Рассмотрим одно из самых распространенных событий — 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() :

  • переменная myImg ассоциирована с тегом img — картинкой, свойство которой width — ширина — меняется в самой функции.
  • Вызов функции происходит по загрузке страницы в событии onload тела документа (тело — body — главный элемент, поэтому загрузка страницы — это событие, относящееся к телу).
  • Задание 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.write добавляет html во время построения DOM
  • alert блокируют выполнение JS, пока пользователь не нажмёт OK
  • Рассмотрим все простые способы вывода отладочной информации :

    document.innerHTML += "htmlstr"; // добавляет на страницу

    console.log("str"); // выводит в консоль браузерах


    Задание Js8_5. Выполните задание по инструкции:

  • Создайте веб-страницу и расположите в ней тег img с изображением грустного смайлика.
  • Щелчок на изображении (onclick) вызывает заданный метод (пользовательская функция):
  • В скрипте опишите метод (функция sayHello()), который «спрашивает», как зовут пользователя, а затем приветствует его по имени, и меняет изображение на улыбающийся смайлик (свойство src тега img):
  • function sayHello() { var userName= prompt("Как вас зовут?" ) ; if (userName) { alert(...) ; document.getElementById ("smileImg" ) . ...= ...; } }

    function sayHello() { var userName=prompt("Как вас зовут?"); if(userName){ alert(...); document.getElementById("smileImg"). ...=...; } }

    =>>

    События onMouseOver и onMouseOut

    Событие наступает при наведении (onMouseOver) на объект и при выведении (onMouseOut) за пределы объекта курсора мыши.

    Назначение обработчика событий осуществляется точно таким же образом, как и в случае .

    Поэтому выполним задание:

    Задание Js8_6. По наведению курсора мыши на гиперссылки закрашивать задний фон страницы в разные цвета.

    Дополните код:

    Зеленый
    … seagreen
    … magenta
    … purple
    … navy
    … royalblue

    Задание Js8_7. Создание rollover-изображения

    — Добавьте в код тег img с изображением.
    — Введите обработчики событий onmouseover (по наведению) и onmouseout (при отведении). Сделайте это в виде функций.
    — Присоедините к обработчику событий onmouseover процедуру загрузки в тег img другого изображения.
    — Присоедините к обработчику событий onmouseout процедуру загрузки другого изображения в тег img .

    Несколько обработчиков одного и того же события

    В javascript можно назначать НЕСКОЛЬКО обработчиков одного и того же события. Для этого используются методы:

  • addEventListener — добавление обработчика
  • removeEventListener — удаление обработчика
  • Синтаксис addEventListener :

    У метода три аргумента:

    Element.addEventListener(event, handler[, phase]);

  • event click
  • handler — функция-обработчикgetElementById ("MyElem" ) ; input.addEventListener ("click" , message) ;

    function message() { alert("Ура!"); } var input = document.getElementById("MyElem"); input.addEventListener("click", message);

    Синтаксис removeEventListener :

    Методу следует передать те же аргументы, что были у addEventListener :

    Element.removeEventListener(event, handler[, phase]);

  • event — название события, например, click
  • 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 - элемент, на котором произошло событие

    Последнее обновление: 1.11.2015

    Встроенные обработчики

    В прошлой теме были рассмотрены встроенные обработчики (inline event handler), которые определяются в коде элемента с помощью атрибутов:

    Хотя этот подход прекрасно работает, но он имеет кучу недостатков:

      Код html смешивается с кодом JavaScript, в связи с чем становится труднее разрабатывать, отлаживать и поддерживать приложение

      Обработчики событий можно задать только для уже созданных на веб-странице элементов. Динамически создаваемые элементы в этом случае лишаются возможности обработки событий

      К элементу для одного события может быть прикреплен только один обработчик

      Нельзя удалить обработчик без изменения кода

    Свойства обработчиков событий

    Проблемы, которые возникают при использовании встроенных обработчиков, были призваны решить свойства обработчиков. Подобно тому, как у html-элементов есть атрибуты для обработчиков, так и в коде javascript у элементов DOM мы можем получить свойства обработчиков, которые соответствуют атрибутам:

    function handler(e){ alert(e.type); } document.getElementById("rect").onclick = handler;

    В итоге нам достаточно взять свойство onclick и присвоить ему функцию, используемую в качестве обработчика. За счет этого код html отделяется от кода javascript.

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

    Слушатели событий

    Несмотря на то, что свойства обработчиков решают ряд проблем, которые связаны с использованием атрибутов, в то же время это также не оптимальный подход. Еще один способ установки обработчиков событий представляет использование слушателей.

    Для работы со слушателями событий в JavaScript есть объект EventTarget , который определяет методы addEventListener() (для добавления слушателя) и removeEventListener() для удаления слушателя. И поскольку html-элементы DOM тоже являются объектами EventTarget, то они также имеют эти методы. Фактически слушатели представляют те же функции обработчиков.

    Метод addEventListener() принимает два параметра: название события без префикса on и функцию обработчика этого события. Например:

    #rect{ width:50px; height:50px; background-color:blue; } var rect = document.getElementById("rect"); rect.addEventListener("click", function (e) { alert(e.type); });

    То есть в данном случае опять же обрабатывается событие click. И также можно было бы в качестве второго параметра название функции:

    Function handler(e){ alert(e.type); } var rect = document.getElementById("rect"); rect.addEventListener("click", handler);

    Удаление слушателя аналогично добавлению:

    Rect.removeEventListener("click", handler);

    Преимуществом использования слушателей является и то, что мы можем установить для одного события несколько функций:

    Var clicks = 0; function handlerOne(e){ alert(e.type); } function handlerTwo(e){ clicks++; var newNode = document.createElement("p"); newNode.textContent = "произошло нажатие " + clicks; document.body.appendChild(newNode); } var rect = document.getElementById("rect"); // прикрепляем первый обработчик rect.addEventListener("click", handlerOne); // прикрепляем второй обработчик rect.addEventListener("click", handlerTwo);

    Если вы не заметили, большинство приложений и веб-сайтов довольно скучны, если существуют сами по себе. Они встречают вас помпезным и броским интерфейсом, однако впечатление от него очень быстро сходит на нет, если вы не начинаете взаимодействовать с ними:

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

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

    Что такое события?

    В общем, все, что вы создаете, может быть смоделировано следующим заявлением:

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

    Это универсальная модель применима ко всем кодам, которые мы с вами составляли. Эта модель также относится ко всем кодам, которые когда-либо составляли все ваши знакомые разработчики / дизайнеры для своих приложений.

    Не существует никакого способа обойти эту модель, так что … нет никакого смысла и пытаться. Вместо этого, вам нужно глубже изучить эту очень полезную вещь, известную как событие.

    Событие это не более чем сигнал. Он сообщает, что что-то только что произошло. Этим что-то может быть нажатие кнопки мыши. Это может быть нажатие клавиши на клавиатуре. Это может быть изменение размера вашего окна. Это может быть просто только что произошедшая загрузка вашего документа.

    Вы должны понять, что этот сигнал может быть встроен сотней разных способов в JavaScript … или во что-то пользовательское, что вы создали только для вашего приложения в единственном экземпляре.

    Возвращаемся к нашей модели. События составляют первую половину заявления:

    События определяют вещь, которая происходит. Они посылают сигнал. Вторая часть модели определяет реакцию на событие:

    В конце концов, какая польза от сигнала, если на той стороне нет никого, кто ожидает его, а затем предпринимает соответствующие действия?! Хорошо — теперь, когда у вас есть достаточное понимание того, что такое события, давайте посмотрим, как протекает жизнь событий в заповеднике, известном как JavaScript .

    События и JavaScript

    Учитывая важность событий, не удивительно, что в JavaScript реализованы многочисленные инструменты работы с ними. Существуют две основные вещи, которые вы должны сделать, чтобы работать с событиями:

    • Отслеживание событий;
    • Реакция на события.

    Эти два шага кажутся довольно простыми, но не забывайте, что мы имеем дело с JavaScript . Простота является всего лишь дымовой завесой, за которой могут скрываться серьезные проблемы, которые вы получите, если предпримете неправильные действия. Возможно, я слишком драматизирую? Что ж, разберемся вместе.

    1. Отслеживание событий

    Если честно, то я в свое время прошел через все что вы делаете внутри приложения для определения событий. Иногда, ваше приложение определяет событие автоматически, например, при загрузке. Иногда событие определяется, как результат вашего взаимодействия с приложением.

    Следует отметить, что приложение бомбардируется событиями постоянно, независимо от того, нужно ли вам их фиксировать или нет. Наша задача заключается в том, чтобы указать приложению, отслеживать только те события, которые нам нужны.

    Тяжелая работа по отслеживанию нужных нам событий выполняется функцией под названием addEventListener . Эта функция отвечает за то, чтобы постоянно быть начеку и уведомлять другие части вашего приложения, когда происходит какое-то интересное событие.

    То, как вы используете эту функцию, выглядит следующим образом:

    source.addEventListener(eventName, eventHandler, false);

    Давайте проанализируем, что означает каждая из частей этой функции.

    Источник

    Вы вызываете addEventListener через элемент или объект, в котором хотите прослушивать события. Как правило, это DOM -элемент, но это также может быть документ, окно или любой другой объект, который может генерировать события.

    Имя события

    Первый аргумент, который вы указываете для функции addEventListener — это имя события, которое вы хотите отслеживать. Полный список событий, с которыми вы можете взаимодействовать, слишком велик, чтобы привести его здесь полностью (посетите лучше эту страницу ), но некоторые из наиболее распространенных событий, с которыми вам придется столкнуться, выглядят следующим образом:

    Событие Событие происходит…
    click …когда вы нажимаете и отпускаете основную кнопку мыши / трекпада / и т.д.
    mousemove …когда курсор мыши перемещается.
    mouseover …когда вы наводите курсор мыши на элемент. Это событие, как правило, используется при выделении объектов!
    mouseout …когда курсор мыши покидает область элемента.
    dblclick …когда вы кликаете мышью дважды.
    DOMContentLoaded …когда DOM вашего элемента полностью загружен.
    load …когда весь ваш документ (DOM, дополнительные элементы: изображения, скрипты и т.д.) полностью загружены.
    keydown …когда вы нажимаете клавишу на клавиатуре.
    keyup … когда вы отпускаете клавишу на клавиатуре.
    scroll …когда вы прокручиваете элемент.
    wheel &
    DOMMouseScroll
    …каждый раз, когда вы используете колесико мыши для прокрутки вверх или вниз.

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

    Обработчик событий

    В качестве второго аргумента вы должны указать функцию, которая будет вызываться, когда событие зафиксировано. Эта функция называется обработчик событий. Чуть ниже я расскажу о ней подробно.

    Захватывать или не захватывать, вот в чем вопрос!

    Последний аргумент может принимать значения true или false .

    Подытоживаем все выше сказанное

    Теперь, когда вы познакомились с функцией addEventListener , давайте подытожим все с помощью одного реального примера:

    document.addEventListener("click", changeColor, false);

    В данном примере наша функция addEventListener прикреплена к объекту документа. Когда зафиксировано событие click , она в ответ на это событие вызывает функцию changeColor (также известную, как обработчик событий ). Это подводит нас вплотную к понятию реакции на события, о чем мы поговорим в следующем разделе.

    2. Реакция на события

    Как было рассказано в предыдущем разделе, отслеживание (прослушивание ) событий обрабатывается функцией addEventListener . После того, как событие зафиксировано, оно должно быть обработано обработчиком событий. Я не шутил, когда я упомянул ранее, что обработчик событий — это не что иное, как функция:

    function normalAndBoring() { // Мне очень нравятся всякие разные вещи, которые могут быть внутри этой функции! }

    Единственное различие между стандартной функцией и той, которая указана в качестве обработчика события, является то, что обработчик событий специально вызывается по имени в вызове addEventListener :

    document.addEventListener("click", changeColor, false); function changeColor() { // Я важна!!! }

    Любой код, который вы размещаете внутри обработчика событий, будет выполняться, когда в addEventListenerfunction зафиксировано нужное вам событие. Это довольно просто!

    Простой пример

    Лучший способ понять то, что мы узнали только что — увидеть все это на примере полностью рабочего кода. Чтобы мы двигались параллельно, добавьте следующую разметку и код в HTML -документ:

    Click Anywhere! document.addEventListener("click", changeColor, false); function changeColor() { document.body.style.backgroundColor = "#FFC926"; }

    Изначально, если вы просмотрите документ в браузере, то увидите просто пустую страницу:

    Однако все изменится, если вы кликните мышью в любом месте страницы. После того как вы сделаете это, цвет фона вашей страницы изменится с белого на ярко-желтый.

    Причину этого довольно легко понять. Давайте посмотрим на код:

    Вызов addEventListener идентичен тому, что мы уже рассматривали, так что давайте пропустим этот этап. Вместо этого обратите внимание на обработчик событий changeColor :

    document.addEventListener("click", changeColor, false); function changeColor() { document.body.style.backgroundColor = "#FFC926"; }

    Эта функция вызывается, когда в документе зафиксировано событие click . Когда вызывается эта функция, она задает ярко-желтый цвет фона элемента body . Связывая это с заявлением, которое мы рассматривали в самом начале, мы увидим, что этот пример будет выглядеть так:

    Если вы понимаете суть происходящего, то это здорово! Вы только что узнали об одном из важнейших понятий, с которым столкнетесь в программировании. Но мы еще не закончили. Мы не позволим обработчикам событий так легко соскочить с нашего крючка, так что давайте рассмотрим еще один момент.

    Аргументы событий и тип события

    Обработчик событий делает больше, чем просто вызывается, когда событие зафиксировано через функцию отслеживания событий. Он также через свои аргументы обеспечивает доступ к объекту основного события. Для простого доступа к этому объекту события мы должны изменить сигнатуру обработчика, чтобы прописать поддержку этих аргументов.

    function myEventHandler(e) { // элементы обработчика событий }

    На данный момент, обработчик событий — это все еще старая добрая функция. Но это то, что нам и нужно, это функция, которая принимает один аргумент … аргумент события!

    Вы можете использовать любой допустимый идентификатор для аргумента, но я, как правило, предпочитаю e, потому что так делают все крутые парни. Нет ничего технически неправильного в том, чтобы определить событие следующим образом.

    Одной из самых важных возможностей языка JavaScript, которая, пожалуй, является основной в этом языке, это возможность обрабатывать какие-то события . Такая возможность является особенностью для JavaScript по сравнению с другими языками из web программирования, потому что только этому языку в силе сделать подобное.

    Что такое событие и обработчики событий

    Событие - это некое действие, которое может производить либо пользователь, либо другие объекты на странице.

    Самым ярким примером события это клик пользователя по какому-то объекту(click ), будь то это кнопка, ссылка или любой другой элемент. Другой пример события, это наведение мыши над каким-то объектом(mouseover ), скажем над изображением. Также событием является полное загрузка страницы(load ). В общем все действия, которые происходят на сайте являются событиями.

    Так вот, мы можем захватить любое событие, которое производится на странице и обрабатывать её с помощью соответствующего обработчика. Например, при наведении мыши на какой-то блок div, мы можем вывести некое сообщение, допустим "Вы находитесь в текстовой области". Или, при клике по кнопке скрыть какой-то блок со страницы. В общем, много чего можно сделать пре обработки какого-то события.

    И для того чтобы обрабатывать какое-то событие, необходимо использовать специальный обработчик для данного события. Каждое событие имеет свой обработчик, например, у события клик(click ) есть обработчик onclick . У события наведения мыши над объектом(mouseover ) есть обработчик onmouseover . И у события полной загрузки страницы(load ) есть обработчик onload .

    То есть как вы поняли название обработчика , формируется из префикса "on" + название события.

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

    Обработчик события вызывается в качестве атрибута, в самом теге HTML элемента. В значение обработчика можно написать сразу код JavaScript, но лучше вызывать какую-то функцию, которая сделает необходимые действия. Функцию необходимо описать внутри тега script, который может находится как внутри блока head, так и в конце тега body. В качестве параметра для этой функции передаётся слово this , то есть текущий объект.

    Теперь напишем простой пример. При наведении мыши над блоком с текстом, выведем с помощью метода alert, сообщение о том что пользователь находится внутри текстовой области.

    Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry"s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.

    Div{ padding-left: 50px; width: 200px; border: 1px solid #000; }

    JavaScript код:

    Function blockOver(block){ alert("Вы находитесь в текстовой области "); }

    Сохраняем документ, открываем его в браузере, наводим курсор мыши над текстом и видим результат обработки данного события:


    Как получить значение атрибута в javascript ?

    С помощью параметра функций (this), можно получить значение какого-то атрибута текущего объекта , например, узнать его id.

    Для примера, создадим кнопку и зададим ей id со значением "justButton". Когда кликнем на данную кнопку, то выведем такое сообщение: "Вы кликнули по кнопке, с идентификатором значение_id". Здесь необходимо уже использовать обработчик onclick .

    JavaScript код:

    Function clickOnButton(button){ alert("Вы кликнули по кнопке, с идентификатором: " + button.id); }

    Сохраняем документ, открываем его в браузере и кликаем по кнопке.


    Таким же образом можно вывести имя кнопки(button.name ) или её значение(button.value )

    Получаем значение ширины и высоты элемента

    Ещё можно узнать значения CSS свойства элемента , например, ширину и высоту. Для получения ширины используются свойства clientWidth и offsetWidth , а для высоты clientHeight и offsetHeight . Для примера, выведем значения ширины и высоты кнопки, по которой кликнули.

    Теперь содержимое функции clickOnButton будет такой:

    Function clickOnButton(button){ //alert("Вы кликнули по кнопке, с идентификатором: " + button.id); var width = button.clientWidth || button.offsetWidth; var height = button.clientHeight || button.offsetHeight; alert("Ширина кнопки: " + width + "\nВысота кнопки: " + height); }

    Результат данного примера:


    Напоминаю, что ширина элемента считается вместе со значением padding, поэтому она и равна 111px [ 99px(width) + 6px(padding-left) + 6px(padding-right) ].

    В случае если для обработки какого-то события, не нужно писать много кода, то можно написать данный код прямо в значение обработчика . То есть вместо вызова функции пишем сразу нужный код.

    Например, при загрузке страницы можно вывести сообщение о том, что "страница загружается". Для этого необходимо использовать событие load и её обработчик onload . Данный обработчик напишем в открывающем теге body.

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

    И в конец данной статьи разберём простой пример обработки формы. Обработка формы на JavaScript, во-первых, уменьшает загрузку на сервер и во-вторых придаёт дополнительный плюс к юзабилити сайта.

    Форма состоится из одного поля для логина, и кнопки отправить. При отправке формы, будем проверять длину логина. Его длина должна быть больше трёх символов.

    Начнём, мы с HTML структуры данной формы.

    Теперь, тегу формы добавим в качестве атрибута обработчик onsubmit , события submit . Следующим образом:

    Событие submit срабатывает при отправке формы. Оператора return мы написали для того чтобы запретить отправку формы, в случае обнаружения ошибки в вводе данных. Если функция вернёт значение false, то значение обработчика onsubmit будет «return false», это значит, что форма не отправиться на сервер. В противном случае, если форма вернёт true, то значение обработчика будет «return true» и форма отправится без проблем.

    Иногда бывает необходимо чтобы полностью запретить отправку формы, в таком случае значение обработчика onsubmit будет таким:

    Onsubmit = "checkForm(this); return false;"

    Как Вы наверняка уже догадались, checkForm это название функции, которая вызовется, когда сработает событие submit. Вы можете назвать её как хотите, следуя правилам наименования функции.

    И так, вернёмся к нашему примеру. Теперь нам необходимо описать функцию checkForm. В ней будет такое условие: если длина логина меньше трёх символов, то мы возвращаем false и форма не отправится, в противном случае, если данные были введены правильно, то, мы отправляем форму на сервер.

    Function checkForm(form){ //Получаем значение поля формы, у которой name равен login var login = form.login.value; //Проверяем, если длина логина меньше трёх символов то выводим сообщение об ошибке и отменяем отправку формы. if(login.length > 3){ alert("Длина логина должна быть больше трёх символов"); return false; }else{ return true; } }

    Сохраняем документ, открываем его в браузере и тестируем.


    Таким вот образом можно проверить форму на языке JavaScript и отменить её отправку в случае ошибки.

    Ну и на этом всё дорогие читатели. Подведём итоги.
    События используются очень часто, поэтому Вы должны уметь работать с ними на все 100.

    В этой статье Вы узнали, что такое событие и обработчик события . Вы узнали, как получить значения атрибутов элементов и как узнать ширину и высоту элемента . Также Вы узнали, как сделать проверку формы.

    Задачи
  • Создайте простой калькулятор сложения цифр.
    • Создайте форму с двумя числовыми полями(type="number") для ввода чисел и кнопку с надписью "Сложить"
    • При нажатии на кнопку отправить, вызовите функцию обработки данного события.
    • Внутри функции получите значения полей и методом alert, выведите результат сложения введённых чисел.
    • Сделайте так чтобы форма не отправлялось после нажатия по кнопке.
  • На этом уроке мы рассмотрим основные виды событий, которые Вы можете перехватывать с помощью JavaScript для выполнения некоторого кода.

    Категории событий

    Все события JavaScript можно разделить на следующие категории: события мыши (Mouse Events), события клавиатуры (Keyboard Events), события объектов и фреймов (Frame/Object Events), события формы и элементов управления (Form Events), события перетаскивания (Drag Events), события анимации (Animation Events), события буфера обмена (Clipboard Events), события мультимедиа (Media Events), события трансформации (Transition Events), события, посылаемые сервером (Server-Sent Events), события касания (Touch Events), события печати (Print Events), разные события (Misc Events).

    Внимание: все события в JavaScript пишутся строчными (маленькими) буквами.

    События мыши
    • mousedown - событие происходит, когда кнопка мыши нажата над некоторым элементом, но ещё не отпущена.
    • mouseup - событие происходит, когда кнопка мыши над некоторым элементом перешла из состояния нажатия, в состояние отпущена.
    • click - событие происходит, когда пользователь кликнул мышью на элементе. Порядок возникновения событий, связанных с click (для левой и средней кнопки мыши): mousedown -> mouseup -> click .
    • contextmenu - событие происходит, когда пользователь кликнул правой кнопкой мышью на элементе. Порядок возникновения событий, связанных с contextmenu (для правой кнопки мыши): mousedown -> mouseup -> contextmenu .
    • dblclick - событие происходит, когда пользователь выполнил двойной клик на элементе. Порядок возникновения событий, связанных с dblclick: mousedown -> mouseup -> click -> mousedown -> mouseup -> click -> dblclick .
    • mouseover - событие происходит, когда курсор мыши входит в область, принадлежащей элементу или одному из его детей.
    • mouseout - событие происходит, когда курсор мыши уходит из области, принадлежащей элементу или одному из его детей.
    • mousemove - событие происходит, когда курсор мыши перемещается внутри области, принадлежащей элементу.
    • mouseenter - событие возникает, когда указатель мыши входит в область, принадлежащую элементу. Это событие часто используется вместе с событием mouseleave , которое происходит, когда указатель мыши уходит из области, принадлежащей элементу. Событие mouseenter подобно событию mouseover и отличается от него только тем, что событие mouseenter не всплывает (с понятием всплытия события мы познакомимся немного позже).
    • mouseleave - событие происходит, когда указатель мыши уходит из области, принадлежащей элементу. Событие mouseleave подобно событию mouseout и отличается от него только тем, что событие mouseleave не всплывает (с понятием всплытия события мы познакомимся немного позже).
    События клавиатуры

    Порядок возникновения событий: keydown -> keypress -> keyup .

    • keydown - событие происходит, когда нажата клавиша на клавиатуре над элементом, но ещё не отпущена.
    • keyup - событие происходит, когда нажатая клавиша на клавиатуре над элементом перешла в состояние отпущено.
    • keypress - событие происходит, когда пользователь нажал клавишу на клавиатуре над элементом.
    События объектов и фреймов
    • beforeunload - событие происходит, перед тем как документ будет выгружен. Это событие позволяет отображать дополнительное сообщение в диалоговом окне подтверждения "Вы действительно хотите покинуть эту страницу?". Стандартное сообщение, которое появляется при закрытии документа, может отличаться в разных браузерах. Но его Вы не можете изменить или удалить, Вы можете только с помощью этого метода добавить к нему собственное сообщение, которое будет отображаться вместе с сообщением по умолчанию.
    • error - событие срабатывает при возникновении ошибки, которая происходит при загрузке внешнего файла (например, документа или изображения).
    • hashchange - событие происходит при изменении якорной части (начинается с символа "#") текущего URL.
    • load - событие происходит, когда загрузка объекта завершена. Событие load наиболее часто используется для элемента body , чтобы выполнить сценарий сразу же после того как веб-страница полностью загрузится.
    • unload - событие происходит при выгрузке страницы (например, при закрытии вкладки (окна) браузера).
    • pageshow - событие происходит, когда пользователь переходит на веб-страницу, т.е. после того как страница становится доступна пользователю. Событие pageshow похоже на событие load , за исключением того, что оно срабатывает каждый раз при загрузке страницы, даже если она загружается из кэша. При первой загрузке страницы событие pageshow срабатывает сразу после события load .
    • pagehide - событие происходит, когда пользователь уходит со страницы (событие pagehide происходит до события unload). Кроме этого данное событие, в отличие от события unload не препятствует кэшированию страницы.
    • resize - событие происходит при изменении размеров окна браузера.
    • scroll - событие происходит, когда вы прокручиваете содержимое элемента, имеющего полосу прокрутки.
    События формы и элементов управления
    • focus - событие происходит, когда элемент получает фокус. Данное событие не всплывает.
    • blur - событие происходит, когда объект теряет фокус. Данное событие не всплывает.
    • focusin - событие происходит, когда элемент получает фокус. Событие focusin подобно событию focus , но отличается от него тем, что оно всплывает. Поэтому его можно использовать, когда Вам необходимо выяснить, кто теряет фокус: элемент или его ребёнок?
    • focusout - событие происходит, когда элемент собирается потерять фокус. Событие focusout подобно событию blur , но отличается от него тем, что оно всплывает. Поэтому его можно использовать, когда Вам необходимо выяснить, кто теряет фокус: элемент или его ребёнок?
    • change - событие происходит при изменении значения элемента, но уже после того как элемент потерял фокус. Кроме события change в JavaScript есть также похожее событие input , которое отличается от события change тем, что происходит сразу же после изменения значения элемента. Событие сhange в отличие от события input также работает с элементами keygen и select . Для радиокнопок (radiobuttons) и флажков (checkboxes) событие change происходит при изменении состояния этих элементов.
    • input - событие происходит после того как изменяется значение элемента input или элемента textarea .
    • invalid - событие происходит, когда элемент input , данные которого необходимо отправить вместе с другими данными формы на сервер, содержит недопустимые данные.
    • reset - событие происходит перед очисткой формы, которая осуществляется элементом input с type="reset" .
    • search - событие возникает после того как пользователь нажимает на клавишу Enter или нажимает кнопку " x " (отмена) в элементе input с type="search" .
    • select - событие происходит после того как Вы выбрали некоторый текст в элементе. Событие select в основном используется для элемента input с type="text" или textarea .
    • submit - событие происходит перед отправкой формы на сервер.
    События перетаскивания

    События, связанные с перетаскиваемым объектом (draggable target, исходный объект):

    • dragstart – событие происходит, когда пользователь начал перетаскивать элемент;
    • drag – событие происходит, когда пользователь перетаскивает элемент;
    • dragend – событие происходит, когда пользователь закончил перетаскивания элемента, т.е. когда отпустил курсор мыши.

    События, связанные с объектом (drop target), который принимает перетаскиваемый объект (draggable target):

    • dragenter – событие происходит, когда перетаскиваемый объект (draggable target) вошёл в область элемента (drop target), который может принять перетаскиваемый объект (draggable target).
    • ragleave – событие происходит, когда перетаскиваемый объект (draggable target) покидает пределы элемента (drop target), который может его принять.
    • dragover - событие происходит, когда перетаскиваемый объект (draggable target) перемещается в области элемента (drop target), который может его принять.
    • drop - событие происходит, когда пользователь отпускает перетаскиваемый объект (draggable target) в область элемента (drop target), который может его принять.
    События анимации

    Три события, которые могут произойти, во время выполнения CSS анимации:

    • animationstart - возникает, когда анимация CSS началась.
    • animationiteration - возникает, когда анимация CSS выполняется повторно.
    • animationend - возникает, когда CSS анимация закончилась.
    События буфера обмена
    • сopy - событие происходит, когда пользователь копирует содержимое элемента. Событие copy также происходит, когда пользователь копирует элемент (например, изображения, созданные с помощью элемента img). Событие copy используется в основном для элементов input с type="text" .
    • сut - событие происходит, когда пользователь вырезает содержимое элемента.
    • paste - событие происходит, когда пользователь вставляет некоторое содержимое в элемент.
    События печати
    • afterprint - событие происходит, когда страница начинает печататься (т.е. после нажатия кнопки "Печать" в диалоговом окне) или если диалоговое окно "Печать" было закрыто.
    • beforeprint - событие возникает перед печатью страницы, т.е. до открытия диалогового окна "Печать".
    События перехода
    • transitionend - событие возникает, когда CSS-переход завершен. Примечание: если переход удален до завершения, (например, если свойство CSS transition-property удалено), то событие transitionend не сработает.
    События, посылаемые сервером
    • error - событие возникает при возникновении ошибки с источником события. Ошибка обычно возникает, когда связь нарушается. Если это произойдет, то объект EventSource будет автоматически пытаться подключиться к серверу.
    • open - событие возникает, когда соединение с источником события открыто.
    • message - событие возникает, когда сообщение получено через источник события.
      Объект event события message поддерживает следующие свойства:
      • data - содержит сообщение.
      • origin - URL документа, который вызвал событие.
      • lastEventId - идентификатор (id) последнего полученного сообщения.
    События мультимедиа

    В процессе загрузки аудио/видео события происходят в следующем порядке: loadstart -> durationchange -> loadedmetadata -> loadeddata -> progress -> canplay -> canplaythrough .

    • abort - событие возникает, когда прерывается загрузка аудио/видео. Это событие возникает именно когда загрузка медиа данных была прервана (отменена), а не, потому что возникла ошибка.
    • error - событие возникает, когда произошла ошибка при загрузке аудио/видео.
    • stalled - событие возникает, когда браузер пытается получить медиа данные, но данные недоступны.
    • - событие происходит, когда браузер начинает искать указанное аудио/видео, т.е. когда начинается процесс загрузки.
    • durationchange - событие возникает, когда изменяется длительность аудио/видео. Если аудио/видео загружается, то длительность будет меняться от значения "NaN" до фактической длительности аудио/видео.
    • loadedmetadata - событие возникает, когда метаданные для указанного аудио/видео загружены. Метаданные аудио/видео состоят из: длительности, размера (только видео) и текстовой дорожки.
    • loadeddata - событие возникает, после того как первый кадр медиа загрузился.
    • progress - событие происходит, когда браузер загружает указанное аудио/видео.
    • canplay - событие возникает, когда браузер может начать воспроизведение указанного аудио/видео (т.е. когда буферизация потока аудио/видео достаточна для того чтобы браузер мог начать его воспроизводить).
    • canplaythrough - событие возникает в тот момент времени, когда браузер может проигрывать указанное медиа без остановки на буферизацию.
    • ended - событие происходит, когда воспроизведение аудио/видео завершилось (достигло конца). Это событие может использоваться для вывода сообщений типа "Спасибо за внимание", "Спасибо за просмотр" и др.
    • pause - событие происходит, когда воспроизведение аудио/видео приостановлено пользователем или с помощью кода (программно).
    • play - событие происходит, когда начинается воспроизведение аудио/видео. Оно также происходит, когда аудио/видео было снято с паузы и начинает воспроизводиться.
    • playing - событие происходит, когда аудио/видео воспроизводится после того как оно было поставлено на паузу или остановилось для буферизации.
    • ratechange - событие происходит, когда изменяется скорость воспроизведения аудио/видео.
    • seeking - событие происходит, когда пользователь начинает перемещение ползунка (переход) к новой временной позиции проигрываемого аудио/видео.
    • seeked - событие происходит, когда пользователь закончил перемещение ползунка (переход) в новую временную позицию проигрываемого аудио/видео. Событие seeked противоположно событию seeking . Для того чтобы получить текущую позицию воспроизведения, используйте свойство currentTime объекта Audio / Video .
    • timeupdate - событие происходит при изменении временной позиции воспроизводимого аудио/видео.
      Это событие происходит:
      • при воспроизведении потока аудио/видео.
      • при перемещении ползунка в новую временную позицию воспроизводимого аудио/видео.
      Событие timeupdate часто используется вместе со свойством объекта Audio / Video currentTime , которое возвращает текущую временную позицию воспроизводимого аудио/видео в секундах.
    • volumechange – событие происходит каждый раз при изменении громкости воспроизводимого потока видео/аудио.
      Это событие происходит, при:
      • увеличении или уменьшении громкости;
      • отключении или включении звука.
    • waiting - событие происходит, когда видео останавливается для буферизации.
    Разные события
    • toggle - событие происходит, когда пользователь открывает или закрывает элемент details . Элемент details предназначен для создания дополнительных сведений, которые пользователь при необходимости может просматривать или скрывать.
    • wheel - событие происходит при прокручивании колеса мыши вперёд или назад над элементом.
    Задания
  • Является ли событие "Нажатие клавиши на клавиатуре (onkeypress)" сложным? И если является, то в результате, каких простых событий оно возникает?
  • Например, у Вас есть 2 элемента р и пользователь перемещает мышку с области, принадлежащей одному элементу р, на область, принадлежащую другому элементу р. То, какие в этом случае возникают события, и какие элементы их генерируют?
  • 
    Top