Skip to content

Практическая работа №10

Цель работы:

  • Закрепить навыки работы с DOM (поиск элементов, создание/удаление/изменение узлов, манипуляция атрибутами и классами).
  • Закрепить навыки обработки событий (подписка, отмена поведения, делегирование).
  • Создать полноценное, но простое приложение “Список задач”, используя исключительно пройденный материал.

Основные теоретические положения

Section titled “Основные теоретические положения”

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

Назначение обработчиков

Section titled “Назначение обработчиков”

Самый современный и рекомендуемый способ назначения обработчика — это метод addEventListener().

element.addEventListener(event, handler, options);
  • event: Строка, содержащая имя события (например, 'click', 'submit').
  • handler: Функция, которая будет вызвана при наступлении события.

При вызове обработчика браузер передает ему специальный объект event (или e), который содержит информацию о произошедшем событии.

  • event.target: Ссылка на элемент, на котором произошло событие. Это ключевое свойство для реализации делегирования событий.
  • event.currentTarget: Ссылка на элемент, на котором установлен обработчик.
  • event.preventDefault(): Отменяет стандартное действие браузера, связанное с событием. Например, предотвращает отправку формы при клике на <button type="submit">.

Делегирование — это прием, при котором обработчик устанавливается на один из родительских элементов, а не на каждый дочерний. Благодаря свойству event.target, обработчик может определить, на каком именно дочернем элементе произошло событие, и выполнить соответствующее действие.


Основные требования к практической работе

Section titled “Основные требования к практической работе”
  1. Для назначения обработчиков использовать только метод element.addEventListener().
  2. Обязательно использовать свойства event.target и/или метод event.preventDefault() в соответствующих заданиях.
  3. Для управления видимостью и состоянием элементов использовать CSS-классы, а не прямое изменение свойства style.display.
  4. Все обработчики должны быть реализованы через делегирование событий там, где это возможно (например, для списка задач).

Задание. Простой список задач (To-Do List)

Section titled “Задание. Простой список задач (To-Do List)”

Описание: Создайте простое приложение со списком задач. Каждая задача имеет:

  • название;
  • статус: в работе или выполнено.

Требуемый функционал:

  1. Добавление задачи через форму с одним полем «Название».
  2. Удаление задачи — кнопка рядом с каждой задачей.
  3. Изменение статуса — по клику на задачу меняется статус (например, через переключение класса).
  4. Фильтрация по статусу — реализовать возможность показать:
    • все задачи,
    • только «в работе»,
    • только «выполнено».
  5. Редактирование названия — по двойному клику задача превращается в поле ввода, нажатие Enter сохраняет изменения.

Ограничения (Ключевые требования):

  • Не использовать: localStorage, setTimeout, setInterval.
  • Только чистый JavaScript: работа с DOM и событиями.
  • Все данные хранятся только в DOM-структуре (в памяти).

Минимальная HTML‑структура:

<div id="controls">
<input id="taskInput" placeholder="Новая задача">
<button id="addBtn">Добавить</button>
<select id="filter">
<option value="all">Все</option>
<option value="active">В работе</option>
<option value="done">Выполнено</option>
</select>
</div>
<ul id="taskList"></ul>

  1. Что такое событие в контексте браузера и как JavaScript позволяет на него реагировать?
  2. В чем принципиальное отличие между назначением обработчика через element.onclick = function... и element.addEventListener('click', function...)?
  3. Объясните, что такое всплытие событий (event bubbling).
  4. Для чего используется свойство event.target и как оно помогает в делегировании событий?
  5. В каких случаях необходимо вызывать метод event.preventDefault()? Приведите примеры.
  6. Что такое делегирование событий и в чем его преимущество перед назначением обработчика каждому элементу?

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. Основы событий (learn.javascript.ru)
  2. Обработчики событий: addEventListener (learn.javascript.ru)
  3. Объект Event (learn.javascript.ru)
  4. Всплытие и погружение (learn.javascript.ru)
  5. Делегирование событий (learn.javascript.ru)
  6. event.preventDefault() (MDN)