
В этом разделе вы познакомитесь с событиями фокуса в JavaScript и научитесь использовать их для создания интерактивных веб-страниц. Фокус – это состояние элемента, когда он готов к взаимодействию с пользователем, например, к вводу текста или нажатию клавиш. События фокуса позволяют отслеживать, когда элемент получает или теряет фокус, и выполнять определенные действия в ответ на эти события. Вы выполните ряд практических заданий, которые помогут вам закрепить знания и научиться применять события фокуса в различных ситуациях.
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Изменение стиля при фокусе
Сделайте так, чтобы при получении фокуса текстовым полем (событие `focus`), его фоновый цвет менялся на желтый, а при потере фокуса (событие `blur`) - возвращался к исходному (белому).
<input type="text" id="myInput">
const input = document.getElementById("myInput");
input.addEventListener("input__1", () => {
input.style.input__2 = "yellow";
});
input.addEventListener("input__3", () => {
input.style.backgroundColor = input__4;
});
Добавление и удаление класса
При получении фокуса элементом `<input type="text">`, добавьте ему класс "focused". При потере фокуса - удалите этот класс.
.focused {
border: 2px solid blue;
}
<input type="text" id="myInput2">
const input2 = document.getElementById("input__1");
input2.addEventListener("focus", () => {
input2.classList.input__2("focused");
});
input2.addEventListener("blur", () => {
input2.input__3.remove("input__4");
});
Изменение текста при фокусе
При фокусе на текстовом поле, измените текст внутри `<p id="message">` на "Введите ваше имя". При потере фокуса - верните текст на "Поле неактивно".
<input type="text" id="nameInput">
<p id="message">Поле неактивно</p>
const nameInput = document.getElementById("nameInput");
const message = document.input__1("message");
nameInput.addEventListener("focus", () => {
message.input__2 = "Введите ваше имя";
});
nameInput.addEventListener("input__3", () => {
message.textContent = input__4;
});
Отображение/скрытие элемента
Сделайте так, чтобы при фокусе на поле ввода `<input type="password">` появлялся элемент `<div id="tooltip">` с подсказкой (установите `style.display = 'block'`), а при потере фокуса - скрывался (установите `style.display = 'none'`).
#tooltip {
display: none;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
}
<input type="password" id="passwordInput">
<div id="tooltip">Сложный пароль!</div>
const passwordInput = document.getElementById("passwordInput");
const tooltip = document.getElementById("tooltip");
passwordInput.addEventListener(input__1, () => {
tooltip.style.display = input__2;
});
passwordInput.addEventListener("blur", () => {
tooltip.input__3.display = "none";
});
Фокус на нескольких элементах
Добавьте обработчики событий `focus` и `blur` для двух текстовых полей (`<input type="text">`). При получении фокуса любым из них, добавляйте класс "active" этому полю. При потере фокуса - удаляйте класс "active".
.active {
border: 3px solid green;
}
<input type="text" id="input1">
<input type="text" id="input2">
const input1 = document.getElementById("input1");
const input2 = document.getElementById("input2");
function handleFocus() {
this.classList.add("active");
}
function input__1() {
this.classList.remove(input__2);
}
input1.addEventListener("focus", handleFocus);
input1.addEventListener("blur", handleBlur);
input2.addEventListener("focus", input__3);
input2.addEventListener("blur", handleBlur);
Переключение фокуса
Создайте два поля ввода. При потере фокуса с первого поля (blur), автоматически переводите фокус на второе поле.
<input type="text" id="field1">
<input type="text" id="field2">
const field1 = document.getElementById('field1');
const field2 = document.getElementById('field2');
field1.addEventListener(input__1, () => {
field2.input__2();
});
Валидация при потере фокуса
При потере фокуса с поля ввода email (blur), проверьте, содержит ли введенное значение символ '@'. Если нет, добавьте полю класс 'invalid', иначе удалите.
<input type="email" id="emailField">
const emailField = document.getElementById('emailField');
emailField.addEventListener('blur', () => {
if (input__1.value.includes('@')) {
emailField.classList.remove('invalid');
} else {
input__2.classList.input__3('invalid');
}
});
Динамическое изменение placeholder
При фокусе на поле ввода измените его `placeholder` на "Введите значение", а при потере фокуса верните исходный `placeholder` "Поиск...".
<input type="text" id="searchInput" placeholder="Поиск...">
const searchInput = document.getElementById('searchInput');
searchInput.addEventListener(input__1, () => {
searchInput.placeholder = input__2;
});
searchInput.addEventListener('blur', () => {
searchInput.input__3 = 'Поиск...';
});
Запрет ввода при потере фокуса
Сделайте так, чтобы при потере фокуса с текстового поля, оно становилось недоступным для редактирования (disabled).
<input type="text" id="editableInput">
const editableInput = document.getElementById('editableInput');
editableInput.addEventListener(input__1, () => {
editableInput.input__2 = true;
});
Смена изображения при фокусе
При фокусе на поле ввода, замените изображение на другое. При потере фокуса - верните исходное изображение.
<input type="text" id="imageInput">
<img id="myImage" src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image">
const imageInput = document.getElementById('imageInput');
const myImage = document.getElementById('myImage');
imageInput.addEventListener('focus', () => {
myImage.src = input__1;
});
imageInput.addEventListener(input__2, () => {
myImage.input__3 = 'https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png';
});