Проверка html-формы с помощью JS при отправке

У меня есть форма с опционным элементом сверху и полем электронной почты.

<form class = "form-versenden" action = "mainVersendet.php" method = "post" name = "send">
    <div class = "form-group">
        <h4>Bitte tragen Sie die folgenden Daten ein</h4>
        <div class = "form-group">
            <label for = "versandart">Versandart</label>
            <select class = "form-control" id = "versandart" name = "versandart" autofocus>
                <option value = "both">E-Mail und Druck</option>
                <option value = "onlyEmail">Nur E-Mail</option>
                <option value = "onlyPrint">Nur Druck</option>
            </select>
        </div>
        <div class = "form-group">
            <label for = "email">E-Mail</label>
            <input type = "email" class = "form-control" id = "email" placeholder = "email" name = "email">
        </div>
        <button class = "btn" type = "submit">Versenden</button>
    </div>
</form>

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

 document.querySelector('form[name = "send"]').addEventListener("submit", validateFields);

function validateFields(){
    var versandart = document.getElementById("versandart");
    var email = document.getElementById("email");     

    if (versandart.value == 'both' || versandart.value == 'onlyEmail'){
        if (email.value == ''){
            email.setCustomValidity('EMail muss eingegeben werden');
            return false;
        }else if (CHECK HERE if Mail is not correct){
            email.setCustomValidity('EMail format is not correct');
            return false;
        }else{
            //in this case email is not empthy and is correct
            return true;
        }
    }
}

Но это не работает, потому что я перезаписываю стандартную проверку HTML для действительного адреса электронной почты. Поэтому я должен снова проверить это в пункте «ПРОВЕРЬТЕ ЗДЕСЬ, если Mail неверен».

Как мне это сделать и правильно ли это? Или я должен добавить onchangelistener в поле versandart и добавить необходимый тег в поле электронной почты, если выбранное значение подходит для первых двух случаев?

У вас есть проблемы с проверкой того, является ли это действительным адресом электронной почты? Если это так, JavaScrift предлагает функцию isEmail(). Иначе, если (email.value.isEmail())

TimB 08.03.2019 13:03

Вы также можете добавить onsubmit = "validateFields();" к атрибутам формы, таким образом вам не нужно добавлять прослушиватель событий в код (однако работает только в HTML 5).

TimB 08.03.2019 13:06

Идеально! Я искал эту функцию isEMail! Сначала у меня было это с событием onsubmit html, но я прочитал, что это лучшее решение! Но это должно быть onsubmit = "return validateFields()" или?

HobbyCoder 08.03.2019 13:59

Да, ты прав, извини. ;) Что ж, рад, что смог помочь. Я тогда напишу это в решении.

TimB 08.03.2019 14:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем else if используйте функцию isEmail() следующим образом:

else if (email.value.isEmail()) {
    return true;
    // Now the form will get submitted to the PHP script.
}

string.isEmail() возвращает true, если введенный шаблон совпадает с адресом электронной почты, иначе false.

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

Другие вопросы по теме

Похожие вопросы