Использование свойства DOM-объекта
Можно назначать обработчик, используя свойство DOM-элемента
К примеру,
Если обработчик задан через атрибут, то браузер читает HTML-разметку, создаёт новую функцию из содержимого атрибута и записывает в свойство.
#браузер #документ #события
Можно назначать обработчик, используя свойство DOM-элемента
on<событие>
.К примеру,
elem.onclick
.Если обработчик задан через атрибут, то браузер читает HTML-разметку, создаёт новую функцию из содержимого атрибута и записывает в свойство.
#браузер #документ #события
👍6🔥3
Обработчик в атрибуте и свойстве
Обработчик всегда хранится в свойстве DOM-объекта, а атрибут – лишь один из способов его инициализации.
Так как у элемента DOM может быть только одно свойство с именем
P.S. Два примера кода на картинке работают одинаково.
#браузер #документ #события
Обработчик всегда хранится в свойстве DOM-объекта, а атрибут – лишь один из способов его инициализации.
Так как у элемента DOM может быть только одно свойство с именем
onclick
, то назначить более одного обработчика так нельзя.P.S. Два примера кода на картинке работают одинаково.
#браузер #документ #события
👍7🔥3
HTML-атрибуты
В HTML у тегов могут быть атрибуты. Когда браузер парсит HTML, чтобы создать DOM-объекты для тегов, он распознаёт стандартные атрибуты и создаёт DOM-свойства для них.
Таким образом, когда у элемента есть
если атрибут нестандартный.
#браузер #документ #атрибуты_свойств
В HTML у тегов могут быть атрибуты. Когда браузер парсит HTML, чтобы создать DOM-объекты для тегов, он распознаёт стандартные атрибуты и создаёт DOM-свойства для них.
Таким образом, когда у элемента есть
id
или другой стандартный атрибут, создаётся соответствующее свойство. Но этого не происходит, если атрибут нестандартный.
#браузер #документ #атрибуты_свойств
👍3🔥2
Частые ошибки
Если вы только начинаете работать с событиями, обратите внимание на следующие моменты.
Функция должна быть присвоена как
Если добавить скобки, то
#браузер #документ #события
Если вы только начинаете работать с событиями, обратите внимание на следующие моменты.
Функция должна быть присвоена как
sayThanks
, а не sayThanks()
.Если добавить скобки, то
sayThanks()
– это уже вызов функции, результат которого (равный undefined
, так как функция ничего не возвращает) будет присвоен onclick
. Так что это не будет работать.#браузер #документ #события
👍13🔥2
addEventListener
Метод
Данный метод позволяет "вешать" несколько обработчиков одного и того же события на один элемент. Именно благодаря этому является более предпочтительным вариантом обработки событий.
#браузер #документ #события
Метод
EventTarget.addEventListener()
регистрирует определённый обработчик события, вызванного на EventTarget
.Данный метод позволяет "вешать" несколько обработчиков одного и того же события на один элемент. Именно благодаря этому является более предпочтительным вариантом обработки событий.
#браузер #документ #события
👍11🔥4
Свойство «hidden»
Атрибут и DOM-свойство «hidden» указывает на то, видим ли мы элемент или нет.
Мы можем использовать его в HTML или назначать при помощи JavaScript, как в примере ниже (см. пример выше на картинке).
Технически,
#браузер #документ #свойства_узлов
Атрибут и DOM-свойство «hidden» указывает на то, видим ли мы элемент или нет.
Мы можем использовать его в HTML или назначать при помощи JavaScript, как в примере ниже (см. пример выше на картинке).
Технически,
hidden
работает так же, как style="display:none"
. Но его применение проще.#браузер #документ #свойства_узлов
👍11🔥1
Удаление требует именно ту же функцию
Для удаления нужно передать именно ту функцию-обработчик которая была назначена.
Первый вариант не сработает, т.к. в
Обратим внимание – если функцию обработчик не сохранить где-либо, мы не сможем её удалить. Нет метода, который позволяет получить из элемента обработчики событий, назначенные через
#браузер #документ #события
Для удаления нужно передать именно ту функцию-обработчик которая была назначена.
Первый вариант не сработает, т.к. в
removeEventListener
передана не та же функция, а другая, с одинаковым кодом, но это не важно.Обратим внимание – если функцию обработчик не сохранить где-либо, мы не сможем её удалить. Нет метода, который позволяет получить из элемента обработчики событий, назначенные через
addEventListener
.#браузер #документ #события
👍10🔥4
Обработчики некоторых событий можно назначать только через addEventListener
Существуют события, которые нельзя назначить через DOM-свойство, но можно через
Например, таково событие
Так что
#браузер #документ #события
Существуют события, которые нельзя назначить через DOM-свойство, но можно через
addEventListener
.Например, таково событие
DOMContentLoaded
, которое срабатывает, когда завершена загрузка и построение DOM документа.Так что
addEventListener
более универсален. Хотя заметим, что таких событий меньшинство, это скорее исключение, чем правило.#браузер #документ #события
👍10🔥2
Объект события
Чтобы хорошо обработать событие, могут понадобиться детали того, что произошло. Не просто «клик» или «нажатие клавиши», а также – какие координаты указателя мыши, какая клавиша нажата и так далее.
Когда происходит событие, браузер создаёт объект события, записывает в него детали и передаёт его в качестве аргумента функции-обработчику.
Пример выше демонстрирует получение координат мыши из объекта события.
#браузер #документ #события
Чтобы хорошо обработать событие, могут понадобиться детали того, что произошло. Не просто «клик» или «нажатие клавиши», а также – какие координаты указателя мыши, какая клавиша нажата и так далее.
Когда происходит событие, браузер создаёт объект события, записывает в него детали и передаёт его в качестве аргумента функции-обработчику.
Пример выше демонстрирует получение координат мыши из объекта события.
#браузер #документ #события
👍10🔥1
Основные свойства объекта event
#браузер #документ #события
event.type
— тип события, в данном случае "click"
.event.currentTarget
— элемент, на котором сработал обработчик. Значение – обычно такое же, как и у this
, но если обработчик является функцией-стрелкой или при помощи bind
привязан другой объект в качестве this
, то мы можем получить элемент из event.currentTarget
.event.clientX / event.clientY
— координаты курсора в момент клика относительно окна, для событий мыши.#браузер #документ #события
👍8🔥4❤1
Объект события доступен и в HTML
При назначении обработчика в HTML, тоже можно использовать объект
Это возможно потому, что когда браузер из атрибута создаёт функцию-обработчик, то она выглядит так:
То есть, её первый аргумент называется
#браузер #документ #события
При назначении обработчика в HTML, тоже можно использовать объект
event
.Это возможно потому, что когда браузер из атрибута создаёт функцию-обработчик, то она выглядит так:
f
unction(event) { alert(event.type) }
. То есть, её первый аргумент называется
"event"
, а тело взято из атрибута.#браузер #документ #события
👍9❤2🔥1
Можно использовать класс для обработки событий
Как видим, если
Здесь один и тот же объект обрабатывает оба события. Обратите внимание, мы должны явно назначить оба обработчика через
#браузер #документ #события
Как видим, если
addEventListener
получает класс в качестве обработчика, он вызывает menu.handleEvent(event)
, когда происходит событие.Здесь один и тот же объект обрабатывает оба события. Обратите внимание, мы должны явно назначить оба обработчика через
addEventListener
. Тогда объект menu
будет получать события mousedown
и mouseup
, но не другие (не назначенные) типы событий.#браузер #документ #события
👍12❤2🔥1
Декомпозиция процесса обработки событий
Метод
Теперь обработка событий разделена по методам, что упрощает поддержку кода.
#браузер #документ #события
Метод
handleEvent
не обязательно должен выполнять всю работу сам. Он может вызывать другие методы, которые заточены под обработку конкретных типов событий (см. пример на картинке).Теперь обработка событий разделена по методам, что упрощает поддержку кода.
#браузер #документ #события
👍8🔥4
textContent: просто текст
Свойство
Как мы видим, возвращается только текст, как если бы все
На практике редко появляется необходимость читать текст таким образом.
Намного полезнее возможность записывать текст в
#браузер #документ #свойства_узлов
Свойство
textContent
предоставляет доступ к тексту внутри элемента за вычетом всех <тегов>
(см. пример на картинке выше).Как мы видим, возвращается только текст, как если бы все
<теги>
были вырезаны, но текст в них остался.На практике редко появляется необходимость читать текст таким образом.
Намного полезнее возможность записывать текст в
textContent
, т.к. позволяет писать текст «безопасным способом».#браузер #документ #свойства_узлов
👍13❤1🔥1