Перейти к содержимому

Полное руководство по работе с формами в DOM

Формы являются фундаментальными компонентами веб-приложений, обеспечивающими взаимодействие с пользователем и сбор данных. Это руководство поможет вам понять, как обращаться к элементам форм, получать и устанавливать значения полей ввода, обрабатывать события форм и проверять данные.

Доступ к элементам форм

Выбор элементов форм

Элементы форм можно выбрать с помощью различных методов, таких как getElementById, getElementsByName, getElementsByTagName и querySelector.


html
<!DOCTYPE html>
<html>
<head>
    <title>Selecting Form Elements</title>
</head>
<body>
<h4>Fill the form inputs, and press 'Show Input Values' button.</h4>
    <form id="userForm">
        <input type="text" id="username" name="username" placeholder="Username" />
        <input type="email" id="email" name="email" placeholder="Email" />
    </form>
    <button id="showInputs">Show Input Values</button>

    <script>
        // Select elements by ID
        const username = document.getElementById('username');
        const email = document.getElementById('email');
        const showInputsButton = document.getElementById('showInputs');

        // Using querySelector for selection
        const emailByQuery = document.querySelector('#email');

        showInputsButton.addEventListener('click', () => {
            alert(`Username: ${username.value}, Email: ${emailByQuery.value}`);
        });
    </script>
</body>
</html>

Этот пример демонстрирует выбор элементов форм с помощью различных методов и отображение их значений в диалоговом окне при нажатии кнопки «Показать значения полей».

Получение и установка значений полей ввода

Доступ к значениям и их изменение

Значения полей ввода можно получать и изменять с помощью свойства value.


html
<!DOCTYPE html>
<html>
<head>
    <title>Getting and Setting Input Values</title>
</head>
<body>
    <form id="userForm">
        <input type="text" id="username" name="username" placeholder="Username" />
        <input type="email" id="email" name="email" placeholder="Email" />
        <button type="button" id="showValues">Show Values</button>
        <button type="button" id="setValues">Set New Values</button>
    </form>

    <script>
        const username = document.getElementById('username');
        const email = document.getElementById('email');
        const showValuesButton = document.getElementById('showValues');
        const setValuesButton = document.getElementById('setValues');

        showValuesButton.addEventListener('click', () => {
            alert(`Username: ${username.value}\nEmail: ${email.value}`);
        });

        setValuesButton.addEventListener('click', () => {
            username.value = 'newUsername';
            email.value = '[email protected]';
            alert('Values have been set to new values.');
        });
    </script>
</body>
</html>

Этот пример показывает, как получать и устанавливать значения полей ввода. Нажатие кнопки «Показать значения» отображает текущие значения, а «Установить новые значения» изменяет их и показывает подтверждение.

События форм

Обработка отправки формы с помощью событий submit и reset

Формы могут генерировать события, такие как submit и reset, которые можно обрабатывать для выполнения действий, таких как проверка данных или их обработка.


html
<!DOCTYPE html>
<html>
<head>
    <title>Form Events</title>
</head>
<body>
    <form id="userForm">
        <input type="text" id="username" name="username" placeholder="Username" />
        <input type="email" id="email" name="email" placeholder="Email" />
        <button type="submit">Submit</button>
        <button type="reset">Reset</button>
    </form>

    <script>
        const form = document.getElementById('userForm');

        form.addEventListener('submit', (event) => {
            event.preventDefault();
            alert('Form submitted!');

            // Perform form validation or data processing here
        });

        form.addEventListener('reset', () => {
            alert('Form reset!');
        });
    </script>
</body>
</html>

Этот пример демонстрирует обработку событий submit и reset формы для выполнения действий, таких как предотвращение поведения по умолчанию, проверка данных и их обработка.

Обработка взаимодействий пользователя в реальном времени

Помимо submit и reset, формы часто используют события input, change, focus и blur для реакции на действия пользователя в реальном времени. Событие input срабатывает сразу же, когда пользователь начинает вводить текст, а change — когда элемент теряет фокус после изменения его значения.


html
<script>
    const inputField = document.getElementById('username');

    inputField.addEventListener('input', (e) => {
        console.log('User is typing:', e.target.value);
    });

    inputField.addEventListener('change', (e) => {
        console.log('Value changed:', e.target.value);
    });
</script>

Проверка данных и предотвращение поведения по умолчанию

Проверка данных формы

Проверку данных на стороне клиента можно выполнить для обеспечения корректности данных перед отправкой формы.


html
<!DOCTYPE html>
<html>
<head>
    <title>Form Validation</title>
</head>
<body>
    <form id="userForm">
        <input type="text" id="username" name="username" placeholder="Username" required />
        <input type="email" id="email" name="email" placeholder="Email" required />
        <button type="submit">Submit</button>
    </form>

    <script>
        const form = document.getElementById('userForm');

        form.addEventListener('submit', (event) => {
            event.preventDefault();

            const username = document.getElementById('username').value;
            const email = document.getElementById('email').value;

            if (!username || !email) {
                alert('Please fill in all fields.');
                return;
            }

            // Modern approach: use checkValidity() for built-in validation
            if (!form.checkValidity()) {
                form.reportValidity();
                return;
            }

            // Fallback/custom regex validation if needed
            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!emailRegex.test(email)) {
                alert('Please enter a valid email address.');
                return;
            }

            alert('Form submitted successfully!');
        });
    </script>
</body>
</html>

Этот пример демонстрирует проверку данных формы на стороне клиента, включая обязательные поля и проверку формата электронной почты, а также предотвращение отправки формы при неудачной проверке.

INFO

Используйте querySelector и querySelectorAll для эффективного выбора элементов форм, а также всегда проверяйте значения полей ввода перед отправкой формы, чтобы обеспечить целостность данных и бесшовный пользовательский опыт.

WARNING

Проверка на стороне клиента улучшает пользовательский опыт, но не заменяет проверку на стороне сервера. Всегда проверяйте и очищайте данные на вашем бэкенде.

Заключение

Работа с формами в JavaScript включает обращение к элементам форм, получение и установку значений полей ввода, обработку событий форм и проверку данных. Освоив эти методы, вы сможете создавать динамичные и отзывчивые веб-формы, которые улучшают взаимодействие с пользователем и сбор данных.

Практика

Какие из следующих утверждений об обработке форм в JavaScript являются верными?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.