Практическая работа №9
Обработка событий (Events)
Section titled “Обработка событий (Events)”Цель работы:
- Освоить механизм обработки событий в браузере.
- Научиться использовать метод
addEventListener()для назначения обработчиков. - Понять, как работает объект
eventи его ключевые свойства, такие какevent.target. - Изучить методы управления поведением браузера, в частности
event.preventDefault().
Основные теоретические положения
Section titled “Основные теоретические положения”Механизм событий
Section titled “Механизм событий”События — это сигналы, которые посылаются браузером, когда что-то происходит на странице (например, клик мыши, загрузка страницы, отправка формы). JavaScript позволяет реагировать на эти события, выполняя определенные функции — обработчики событий.
Назначение обработчиков
Section titled “Назначение обработчиков”Самый современный и рекомендуемый способ назначения обработчика — это метод addEventListener().
element.addEventListener(event, handler, options);event: Строка, содержащая имя события (например,'click','mouseover','submit').handler: Функция, которая будет вызвана при наступлении события.options: Необязательный объект с дополнительными параметрами (например,once: trueдля однократного срабатывания).
Объект event
Section titled “Объект event”При вызове обработчика браузер передает ему специальный объект event (или e), который содержит информацию о произошедшем событии.
event.target: Ссылка на элемент, на котором произошло событие. Это ключевое свойство для реализации делегирования событий.event.currentTarget: Ссылка на элемент, на котором установлен обработчик.event.type: Тип события (например,'click').
Управление поведением
Section titled “Управление поведением”event.preventDefault(): Отменяет стандартное действие браузера, связанное с событием. Например, предотвращает переход по ссылке при клике на<a>или отправку формы при клике на<button type="submit">.event.stopPropagation(): Останавливает всплытие события, предотвращая его достижение родительских элементов.
Делегирование событий
Section titled “Делегирование событий”Делегирование — это прием, при котором обработчик устанавливается на один из родительских элементов, а не на каждый дочерний. Благодаря свойству event.target, обработчик может определить, на каком именно дочернем элементе произошло событие, и выполнить соответствующее действие. Это оптимизирует производительность и упрощает работу с динамически добавляемыми элементами.
Основные требования к практической работе
Section titled “Основные требования к практической работе”- Использовать DOM-структуру, созданную в Практической работе №8.
- Для назначения обработчиков использовать только метод
element.addEventListener(). - Обязательно использовать свойства
event.targetи/или методevent.preventDefault()в соответствующих заданиях. - Для управления видимостью и состоянием элементов использовать CSS-классы, а не прямое изменение свойства
style.display.
Задания для выполнения
Section titled “Задания для выполнения”Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 10, варианты повторяются по кругу (например, 11-й студент выполняет Вариант 1, 12-й - Вариант 2 и т.д.).
Вариант 1: Управление списком пользователей
Section titled “Вариант 1: Управление списком пользователей”База (из ПР №8, Вариант 1): Список пользователей
Задача:
- Добавить кнопку “Удалить” рядом с именем каждого пользователя.
- По клику на кнопку “Удалить” соответствующий элемент списка (
<li>) должен быть удален из DOM. - Добавить обработчик клика на весь список (
<ul>), который при клике на имя пользователя добавляет/удаляет классuser-selected(делегирование).
Вариант 2: Интерактивный каталог книг
Section titled “Вариант 2: Интерактивный каталог книг”База (из ПР №8, Вариант 2): Каталог книг
Задача:
- Добавить кнопку “Подробнее” к каждой карточке книги.
- По клику на “Подробнее” в карточке должен появиться или исчезнуть дополнительный параграф с текстом “Книга доступна в электронном формате”.
- Добавить обработчик, который при наведении курсора на карточку книги добавляет ей класс
card-hover(используя событияmouseoverиmouseout).
Вариант 3: Сортировка таблицы продуктов
Section titled “Вариант 3: Сортировка таблицы продуктов”База (из ПР №8, Вариант 3): Таблица продуктов
Задача:
- Добавить обработчик клика на заголовок колонки “Цена” в таблице.
- По клику таблица должна быть отсортирована по цене (по возрастанию/убыванию, переключаясь при каждом клике).
- Дополнительно: Добавить кнопку “Сбросить сортировку”, которая возвращает таблицу к исходному порядку.
Вариант 4: Управление задачами
Section titled “Вариант 4: Управление задачами”База (из ПР №8, Вариант 4): Список задач
Задача:
- Добавить обработчик клика на текст каждой задачи.
- По клику на текст задачи, ее статус должен переключаться между
completedиpending(добавление/удаление классаcompleted). - Добавить внизу списка форму с полем ввода и кнопкой “Добавить задачу”. При отправке формы (используя
event.preventDefault()) новая задача должна добавляться в список.
Вариант 5: Активное меню
Section titled “Вариант 5: Активное меню”База (из ПР №8, Вариант 5): Меню навигации
Задача:
- Добавить обработчик клика на каждый пункт меню (
<a>). - По клику:
- Удалить класс
active-linkсо всех элементов списка. - Добавить класс
active-linkтолько тому элементу, на который был совершен клик.
- Удалить класс
- Использовать
event.preventDefault()для предотвращения перехода по ссылке.
Вариант 6: Слайдер галереи
Section titled “Вариант 6: Слайдер галереи”База (из ПР №8, Вариант 6): Галерея изображений
Задача:
- Добавить две кнопки: “Предыдущее” и “Следующее” рядом с галереей.
- По клику на “Следующее” должно отображаться следующее изображение, а текущее скрываться (управление классом
hidden). - По клику на “Предыдущее” должно отображаться предыдущее изображение. Список должен быть циклическим.
Вариант 7: Форма добавления комментария
Section titled “Вариант 7: Форма добавления комментария”База (из ПР №8, Вариант 7): Список комментариев
Задача:
- Добавить форму с полями “Имя автора” и “Текст комментария” перед списком комментариев.
- При отправке формы:
- Использовать
event.preventDefault(). - Получить данные из полей.
- Создать новый элемент комментария и добавить его в начало списка.
- Очистить поля формы.
- Использовать
Вариант 8: Калькулятор валют
Section titled “Вариант 8: Калькулятор валют”База (из ПР №8, Вариант 8): Список валют
Задача:
- Добавить поле ввода (
<input type="number">) и кнопку “Рассчитать” над списком. - По клику на “Рассчитать” (или по событию
inputв поле):- Получить введенную сумму.
- Для каждой валюты в списке отобразить рассчитанную сумму в этой валюте (например, “100 USD = 92.5 EUR”).
Вариант 9: Фильтрация фильмов по рейтингу
Section titled “Вариант 9: Фильтрация фильмов по рейтингу”База (из ПР №8, Вариант 9): Рейтинг фильмов
Задача:
- Добавить выпадающий список (
<select>) с опциями: “Все”, “Рейтинг 8+”, “Рейтинг 5-”. - По событию
changeв выпадающем списке:- Скрыть все элементы списка фильмов.
- Показать только те фильмы, которые соответствуют выбранному фильтру (используя атрибут
data-rating).
Вариант 10: Поиск по сотрудникам
Section titled “Вариант 10: Поиск по сотрудникам”База (из ПР №8, Вариант 10): Профили сотрудников
Задача:
- Добавить поле ввода (
<input type="text">) с меткой “Поиск по имени” над списком сотрудников. - По событию
keyupв поле ввода:- Получить введенный текст.
- Скрыть все профили сотрудников, чье имя не содержит введенный текст (поиск должен быть регистронезависимым).
- Показать только совпадающие профили.
Контрольные вопросы
Section titled “Контрольные вопросы”- Что такое событие в контексте браузера и как JavaScript позволяет на него реагировать?
- В чем принципиальное отличие между назначением обработчика через
element.onclick = function...иelement.addEventListener('click', function...)? - Объясните, что такое всплытие событий (event bubbling).
- Для чего используется свойство
event.targetи как оно помогает в делегировании событий? - В каких случаях необходимо вызывать метод
event.preventDefault()? Приведите примеры. - Что такое делегирование событий и в чем его преимущество перед назначением обработчика каждому элементу?