Интерактивность с помощью JavaScript
Введено| English | Значение |
|---|---|
| DOM/dɒm/ | документный объектный модель |
| event/ɪˈvent/ | событие |
| function/ˈfʌŋkʃn/ | функция |
Открывается меню, но его кнопка по-прежнему указывает на то, что оно закрыто
- Видимая панель и её состояние доступности могут не совпадать. Надёжное взаимодействие обновляет как содержимое, так и элемент управления, описывающий его.
- JavaScript браузера реагирует на действия пользователя. Не помещайте приватные учетные данные в клиентский код; посетители могут просматривать и изменять то, что выполняется на их машинах.
Найдите распознанные элементы
- DOM представляет документ в виде узлов при парсинге HTML. Код может запросить существующий узел и изменить его свойства.
- Скрипт, запускаемый до того, как будет распознан его целевой элемент, может получить
null. Отложенный внешний скрипт запускается после парсинга; скрипт в конце тега body также работает для элементов, расположенных выше него.
Что представляет собой DOM?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Узлы становятся доступными по мере парсинга документа; запрос не может найти цель, которая еще не была обработана.
Зарегистрируйте ответовку один раз
- Событие фиксирует действие, например клик или отправку формы.
addEventListenerрегистрирует функцию для выполнения при генерации этого события. - Найдите кнопку и панель, зарегистрируйте обработчик, затем обновляйте состояние при каждом клике. Не вызывайте функцию во время регистрации, если intend передать её в качестве обработчика.
Какой метод регистрирует обработчик события на элементе?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
addEventListener регистрирует обратный вызов для такого события, как click.
Расставьте шаги настройки этого взаимодействия по порядку.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Регистрация предшествует ответу на событие; обработчик выполняется при отправке события.
Сохраняйте рабочий вариант fallback
- Сохраните это как HTML-файл. Ссылки изначально видимы; кнопка переключения появляется только после готовности её обработчика.
- Дважды нажмите кнопку. Убедитесь, что панель и
aria-expandedизменяются одновременно. Нативная кнопка также реагирует на активацию с клавиатуры.
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Club menu</title></head>
<body>
<button id="menu-button" type="button" hidden
aria-controls="menu-panel" aria-expanded="true">Menu</button>
<nav id="menu-panel" aria-label="Club">
<a href="#meeting">Meeting details</a>
</nav>
<main id="meeting"><h1>Meet Thursday in room 12</h1></main>
<script>
const button = document.querySelector('#menu-button');
const panel = document.querySelector('#menu-panel');
button.addEventListener('click', () => {
panel.hidden = !panel.hidden;
button.setAttribute('aria-expanded', String(!panel.hidden));
});
button.hidden = false;
</script>
</body>
</html>
Изначально: ссылки видны, expanded = true. Первый клик: ссылки скрыты, expanded = false. Второй клик: ссылки видны, expanded = true. При отключенном JavaScript оригинальные ссылки остаются видимыми.
В разобранном примере JavaScript отключён. Что происходит с исходными ссылками навигации?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Ссылки изначально видны. Кнопка изначально скрыта, поэтому неудачное улучшение не удаляет основную навигацию.
Соотнесите каждое состояние панели с правильным состоянием кнопки.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
aria-expanded описывает, находится ли управляемая область в текущий момент в расширенном состоянии.
Разделите полезные проверки от доверенных проверок
- Валидация в браузере может давать быструю обратную связь, но сервер должен независимо валидировать отправленные значения и права доступа. Вызовщик может обойти или изменить браузерный код.
- Используйте
textContentдля вставки простого текста вместо интерпретации его как HTML. Проверяйте отсутствие элементов и ошибки перед добавлением дополнительных функций.
Обработчик клика сам по себе не делает кастомный элемент доступным с клавиатуры. Используйте соответствующий нативный элемент управления и проверяйте фокус и активацию. Также убедитесь, что ваш CSS не переопределяет скрытое состояние панели.
Сервер может доверять каждому отправленному значению, так как его проверил браузер.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Вызывающий код может обойти или изменить код браузера. Проверяйте значения и права доступа независимо на стороне сервера.
Проследите два действия и отказ
- Запишите начальное состояние и состояние после двух активаций. Повторите с использованием клавиатуры, затем проверьте, остается ли доступной основная навигация без скрипта.
- Объясните, что выполняется в браузере, а что требует проверки на сервере. Протестируйте этот локальный пример без отправки реальных данных формы.
Разобранный элемент → зарегистрированный обработчик событий → согласованное обновление состояния. Сохраняйте полезный контент-заглушку и оставляйте доверенную валидацию на стороне сервера.
Панель изначально видна. Переключатель запускается дважды. Каково конечное состояние?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Первый клик скрывает её; второй возвращает. Оба состояния должны оставаться согласованными.
Какие проверки следует включить в этот локальный обзор взаимодействия? Выберите все подходящие варианты.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Проверьте операцию, состояние и резервный вариант. Код браузера — ненадежное место для хранения приватных учетных данных.