Skip to content

Commit

Permalink
New chapter: Input Fields Events
Browse files Browse the repository at this point in the history
  • Loading branch information
jvstme committed Mar 24, 2024
1 parent 8aa38c4 commit f531c0e
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,4 @@
- [Поиск элементов внутри других элементов](web_apis/querying_elements_inside_other_elements.md)
- [События](web_apis/events.md)
- [Поля ввода](web_apis/input_fields.md)
- [События полей ввода](web_apis/input_fields_events.md)
44 changes: 44 additions & 0 deletions src/web_apis/input_fields_events.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# События полей ввода

Помимо событий, характерных всем HTML-элементам, поля ввода имеют два специальных типа событий, которые говорят о том, что пользователь поменял значение в поле. Эти два типа событий отличаются тем, в какой момент они происходят.

- `input` — пользователь совершил любое действие, приводящее к изменения значения. Например, ввёл или удалил один символ в текстовом поле.
- `change` — пользователь совершил одно или несколько действий, по результатам которых значение считается изменённым. Момент срабатывания этого события зависит от типа поля. Например, для текстового поля событие сработает тогда, когда пользователь поменяет значение, а затем уберёт фокус с поля, например кликнув в другом месте страницы. А для поля типа `date` событие сработает тогда, когда пользователь выберет дату в календаре.

Рассмотрим пример страницы, показывающей счётчик числа символов в поле. Счётчик меняется мгновенно, как только пользователь вводит или удаляет очередной символ в поле.

```html
<label for="text-input">Введите текст:</label>
<input type="text" id="text-input">
<p>Длина текста: <span class="counter"></span></p>
```

```js
const input = document.querySelector("input");
const counter = document.querySelector(".counter");

function updateCounter() {
counter.innerText = input.value.length;
}

input.addEventListener("input", updateCounter);
```

## Упражнения

1. Реализуй страницу для транслитерации кириллицы в латиницу. Страница должна содержать поле для ввода текста кириллицей, а в процессе ввода на странице должен мгновенно отображаться тот же текст, но латиницей.

> **Совет:** за помощью в реализации транслитерации можешь обратиться к соответствующему упражнению в главе [Динамический доступ к свойствам объекта](../js/dynamic_property_access.md).
1. Реализуй страницу установки пароля. Страница должна содержать поле для ввода пароля и поле для повтора пароля. Пароль в первом поле должен соответствовать критериям сложности: содержать от 8 до 20 символов, хотя бы одну строчную латинскую букву, хотя бы одну заглавную латинскую букву и хотя бы одну цифру. На странице должно отображаться, какие критерии удовлетворены, а какие нет, при этом индикаторы соответствия должны обновляться мгновенно в процессе ввода пароля. Пример индикаторов:

```
От 8 до 20 символов: ✅
Есть строчная латинская буква: ✅
Есть заглавная латинская буква: ✅
Есть цифра: ❌
```
Пароль во втором поле должен совпадать с паролем в первом. В моменты, когда пароли не совпадают, на странице должна показываться надпись красного цвета `Пароли не совпадают`.
> **Совет:** для паролей есть специальный тип полей ввода, `<input type="password">`.

0 comments on commit f531c0e

Please sign in to comment.