Задать вопрос
@asalahiev

Как задать проверку обязательных полей в форме?

Здравствуйте.
Есть такая форма html:
<form>
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      </div>
      <div class="modal-body"> 
            <input type="text" class="form-control" id="email" placeholder="Email" required="required" />
            <input type="text" class="form-control" id="phone" placeholder="Телефон" required="required" />
            <textarea class="form-control" id="text" cols="30" rows="10" placeholder="Сообщение"></textarea>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
        <button type="submit" class="btn btn-primary" id="btn-send">Отправить письмо</button>
      </div>
    </form>


Такой js скрипт:
$(document).ready(function(){   
    $('#btn-send').click(function () {
        var email = $('#email').val();
        var phone = $('#phone').val();
        var text = $('#text').val();
        $.ajax({
            type: "POST", //метод передачи данных
            url: 'page.php', //обработчик php
            data: {email: email, phone:phone, text:text},//передаваемые данные
            success: function(data) { //получение результата
                var old = $('.modal-header').html();//получаем содержимое div
                $('.modal-header').html(old + data); //добавляем сообщение об отправке
                }
            });
    });
});


И php обработчик:
//получаем данные пришедшие post
$email=$_POST[email];
$phone=$_POST[phone];
$text=$_POST[text];
$mess='E-mail: '.$email.'; <br>Номер телефона: '.$phone.' Текст сообщения: '.$text;//сообщение
$headers  = "Content-type: text/html; charset=utf-8 \r\n";//кодировка 
$headers .= "From: admin@admin.ru";//откуда отправлено письмо
//отправляем email админу
if(mail('admin@admin.ru', 'Форма обратной связи', $mess, $headers)){
echo '<div class="alert alert-success alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    Сообщение успешно отправлено!
    </div>';
}else{
    echo '<div class="alert alert-danger alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <strong>Ошибка !</strong> Сообщение не отправлено!
    </div>';
}


Письма приходят. Но не работает required в полях, даже если ни одно поле не заполнено, письмо отправляется.
Подскажите, как в этой форме добавить проверку на заполненность нужный полей?
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
var email = $('#email').val();
var phone = $('#phone').val();
var text = $('#text').val();
Вот эта дичь не нужна!

В полях формы айдишники меняем на атрибут name. Для почты указываем type="email", для телефона type="tel" (на мобильных устройствах будет сразу открыта цифровая клавиатура для ввода телефона).
<form id="sendEmail" action="#" method="POST">
	<div class="modal-header">
		<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
	</div>
	<div class="modal-body">
		<input type="emal" class="form-control" name="email" placeholder="Email" required />
		<input type="tel" class="form-control" name="phone" placeholder="Телефон" required />
		<textarea class="form-control" name="text" cols="30" rows="10" placeholder="Сообщение" required></textarea>
	</div>
	<div class="modal-footer">
		<button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
		<button type="submit" class="btn btn-primary">Отправить письмо</button>
	</div>
</form>


Данные через ajax отправляем на сервер не по клику на кнопку, а по событию submit как это положено для формы.
$(document).ready(function(){
	$("form#sendEmail").submit(function(event) {
		event.preventDefault();
		$.ajax({
			type: "POST", 
			dataType: "html", 
			url: "page.php", 
			data: $(this).serializeArray(),
			success: function(data) {
				$(".modal-header").after(data);
			}
		});
	});
});


P/S: в php обработчик также необходимо добавить проверку и валидацию данных.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SOM4
@SOM4
Увлечён компьютерами более 30 лет
Уважаемый asalahiev!

Думаю, что не плохо было бы в JS функции проверить содержимое переменных "email", "phone", "text". И вызывать PHP обработчик лишь когда их значения будут не пустыми.

Сами то, что об этом думаете?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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