Добрый день! Очень прошу о помощи, наткнулся на ваш сайт. Я начинающий, сделал форму по скрипту, который нашел с использованием JQuery Validation. Все работает, данные отправляются на почту, валидация тоже вроде есть, но: если оставить все поля пустыми, то форма все равно отправится (появится модальное окошко #thanks) и в форме только тогда появятся подсказки.
Я уже измучился, весь интернет перерыл, а 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 = '
Пользователь оставил данные <br>
Имя: ' . $name . ' <br>
Номер телефона: ' . $phone . '<br>
E-mail: ' . $email . '';
if(!$mail->send()) {
return false;
} else {
return true;
}
?>
Чувствую я, что вы проходили курс Петриченко)
Спасибо за поднятие этого вопроса, так бы долго мучался!
Чтобы у вас всё работало корректно необходимо:
1. Добавить к каждой форме атрибут action, т.к. разные формы в принципе на сервере могут обрабатываться разными php-файлами:
2. Изменить весь представленный вами JavaScript код на следующий:
Действительно, переделал, все формы идеально работают.
Спасибо за ваш труд!