Пустая форма отправляется
Добрый день! Очень прошу о помощи, наткнулся на ваш сайт. Я начинающий, сделал форму по скрипту, который нашел с использованием JQuery Validation. Все работает, данные отправляются на почту, валидация тоже вроде есть, но: если оставить все поля пустыми, то форма все равно отправится (появится модальное окошко #thanks) и в форме только тогда появятся подсказки.
Я уже измучился, весь интернет перерыл, а JS пока не очень знаю, может есть какой-то способ сделать так, чтобы форма не отправлялась, пока все поля пустые? Вроде у каждого прописан required, есть preventDefault и return false, почему же так происходит?
Здесь часть кода из скриптового файла:
Я уже измучился, весь интернет перерыл, а JS пока не очень знаю, может есть какой-то способ сделать так, чтобы форма не отправлялась, пока все поля пустые? Вроде у каждого прописан required, есть preventDefault и return false, почему же так происходит?
Здесь часть кода из скриптового файла:
function validateForms(form) { $(form).validate({ rules: { name: { required: true, minlength: 2 }, phone: "required", email: { required: true, email: true } }, messages: { name: { required: "Пожалуйста, введите свое имя", minlength: jQuery.validator.format("Введите {0} символа!") }, phone: "Пожалуйста, введите свой телефон", email: { required: "Пожалуйста, введите свою почту", email: "Неправильно введен адрес почты" } } }); }; validateForms('#consultation-form'); validateForms('#consultation form'); validateForms('#order form'); $('input[name=phone]').mask("+7 (999) 999-99-99"); $('form').submit(function(e) { e.preventDefault(); $.ajax({ type: "POST", url: "mailer/smart.php", data: $(this).serialize() }).done(function() { $(this).find("input").val(""); $('#consultation, #order').fadeOut(); $('.overlay, #thanks').fadeIn('slow'); $('form').trigger('reset'); }); return false; });Здесь файл PHP:
<?php $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; require_once('phpmailer/PHPMailerAutoload.php'); $mail = new PHPMailer; $mail->CharSet = 'utf-8'; $mail->isSMTP(); $mail->Host = 'smtp.yandex.ru'; $mail->SMTPAuth = true; $mail->Username = 'логин'; $mail->Password = 'пароль'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('почта отправителя', ''); $mail->addAddress('почта получателя'); $mail->isHTML(true); $mail->Subject = 'Данные'; $mail->Body = ' Пользователь оставил данные Имя: ' . $name . ' Номер телефона: ' . $phone . ' E-mail: ' . $email . ''; if(!$mail->send()) { return false; } else { return true; } ?>
Комментарии ()
Войдите, пожайлуста, в аккаунт, чтобы оставить комментарий.
Чтобы у вас всё работало корректно необходимо:
1. Добавить к каждой форме атрибут action, т.к. разные формы в принципе на сервере могут обрабатываться разными php-файлами:
2. Изменить весь представленный вами JavaScript код на следующий:
Действительно, переделал, все формы идеально работают.
Спасибо за ваш труд!