Какие шаги нужно предпринять, чтобы осуществить валидацию сложной формы?

Добрый вечер! <br/> <br/> Я пытаюсь сделать поля "страна" (country) и "дата рождения" (birthday) обязательными для заполнения в форме, где кнопка отправки (submit) расположена вне формы. Перепробовал множество методов, но ни один из них не сработал. <br/> <br/> <pre><code>&lt;form class="setting-general-form form-horizontal" method="post"&gt;
    &lt;label class="tag_field"&gt;
        &lt;input name="first_name" type="text" placeholder=" " value="&lt;?php echo $wo[
            " user "
        ]["first_name "]; ?&gt;"&gt;
        &lt;span&gt;&lt;?php echo $wo["lang"]["first_name"]; ?&gt;&lt;/span&gt;
    &lt;/label&gt;
    &lt;label class="tag_field"&gt;
        &lt;input name="last_name" type="text" placeholder=" " value="&lt;?php echo $wo[
            " user "
        ]["last_name "]; ?&gt;"&gt;
        &lt;span&gt;&lt;?php echo $wo["lang"]["last_name"]; ?&gt;&lt;/span&gt;
    &lt;/label&gt;
    &lt;label class="tag_field"&gt;
        &lt;select id="country" name="country"&gt;
            &lt;?php foreach ($wo[ "countries_name"] as $country_ids=&gt; $country) { $country_id = $wo["user"]["country_id"]; $selected_contry = $country_ids == $country_id ? " selected" : ""; ?&gt;
            &lt;option value="&lt;?php echo $country_ids; ?&gt;" &lt;?php echo $selected_contry; ?&gt; &gt;
                &lt;?php echo $country; ?&gt;
            &lt;/option&gt;
            &lt;?php } ?&gt;
        &lt;/select&gt;
        &lt;span&gt;&lt;?php echo $wo["lang"]["country"]; ?&gt;&lt;/span&gt;
    &lt;/label&gt;
    &lt;?php $cutoff=1 930; $now=d ate( "Y"); $birthday="" ; if ($wo[ "user"][ "birthday"] !="0000-00-00" ) { $birthday=e xplode( "-", $wo[ "user"][ "birthday"]); } ?&gt;
    &lt;label cla
  • 6 февраля 2025 г. 18:04
Ответы на вопрос 2
Чтобы осуществить валидацию полей "страна" (country) и "дата рождения" (birthday) в вашей форме, необходимо сделать несколько вещей. В данном случае, поскольку кнопка отправки (submit) расположена вне формы, вам нужно будет использовать JavaScript для проверки заполненности этих полей перед отправкой формы.

Вот шаги, которые нужно предпринять:

1. **Добавьте класс или атрибуты для обязательных полей**: Убедитесь, что ваши поля имеют соответствующие классы или атрибуты, чтобы вы могли легко к ним обращаться в JavaScript.

2. **Создайте обработчик события для кнопки отправки**: Обработайте событие клика на кнопке, чтобы проверить значения полей.

3. **Проверьте заполнение обязательных полей**: Если обязательные поля не заполнены, предотвратите отправку формы и отобразите сообщение об ошибке.

4. **Отправьте форму**: Если все проверки прошли успешно, отправьте форму.

Пример кода JavaScript для выполнения данных шагов:

```javascript
document.addEventListener("DOMContentLoaded", function () {
    const submitButton = document.getElementById("submit-button"); // Предположим, что у вас есть кнопка с id="submit-button"
    const countrySelect = document.getElementById("country");
    const birthdayInput = document.querySelector('input[name="birthday"]'); // Предположим, что у вас есть поле ввода для даты

    submitButton.addEventListener("click", function (event) {
        let valid = true;

        // Убираем старые сообщения об ошибках
        const errorMessages = document.querySelectorAll(".error-message");
        errorMessages.forEach(msg => msg.remove());

        // Проверка поле страны
        if (!countrySelect.value) {
            valid = false;
            const errorSpan = document.createElement("span");
            errorSpan.className = "error-message";
            errorSpan.textContent = "Пожалуйста, выберите страну.";
            countrySelect.parentNode.appendChild(errorSpan);
        }

        // Проверка даты рождения
        if (!birthdayInput.value) {
            valid = false;
            const errorSpan = document.createElement("span");
            errorSpan.className = "error-message";
            errorSpan.textContent = "Пожалуйста, введите дату рождения.";
            birthdayInput.parentNode.appendChild(errorSpan);
        }

        // Если не валидно, предотвращаем отправку формы
        if (!valid) {
            event.preventDefault();
        } else {
            // Здесь можно добавить дополнительную логику перед отправкой формы, если необходимо
            document.querySelector(".setting-general-form").submit(); // Отправляем форму
        }
    });
});
```

**Обратите внимание на следующие моменты**:

- Убедитесь, что у вас есть идентификатор для кнопки отправки формы (в примере указан `submit-button`).
- Проверьте правильность выбора элементов (например, поле для даты рождения) в соответствии с вашей разметкой.
- Вы можете настроить отображение сообщений об ошибках так, как вам больше нравится.

С помощью этого кода вы сможете выполнить валидацию на стороне клиента перед отправкой формы, и нужные поля будут обязательными для заполнения.
<blockquote>Пытаюсь сделать обязательными поля: country и birthday</blockquote> Для этого существуtт атрибут required. Естественно это не отменяет проверки полей на бэкенде, но это немного другой вопрос. <br/> <br/> <blockquote>где даже submit находится за формой (внесение его внутрь не помогает). </blockquote> Как вообще идея вынести из формы кнопку субмита пришла в голову? А главное - зачем? <br/> <br/> <blockquote>Перепробовал все способы которые нарыл. Ничего не помогает.</blockquote> Плохо рыли. Это вообще дефолтное поведение формы, не требующее никаких скриптов. Форма не отправиться пока не будут заполнены указанные как required поля. Если нужны какие-либо еще манипуляции с формой на js, то делается по другому. Форма не трогается, а в кнопку никакие онклики не лепятся. На объект формы вешается событие онсубмит, после чего ПРОВАЛИДИРОВАННАЯ форма вызовет это событие, и дальше уже можно работать с данными формы, в том числе и отправить ее аяксом на бэкенд если необходимо.
Похожие вопросы