Вы неправильно инициализировали плагин jQuery Validate, поэтому кажется, что проверка HTML5 вступает во владение благодаря атрибуту type="email"
.
Ваш код:
$('#m_post_submit').click(function(e) {
e.preventDefault();
....
form.validate({ ... });
....
form.ajaxSubmit({ ... });
});
Вы не должны иметь .validate()
внутри обработчика событий click
. Просто вызовите его один раз при загрузке страницы , и click
будет записан автоматически.Метод .validate()
в основном используется для инициализации плагина в вашей форме, а не для проверки правильности.
Ajax принадлежит внутри функции submitHandler
плагина.
Код должен выглядеть примерно так:
$(document).ready(function() {
$('#yourform').validate({ // <- initializes plugin
rules: {
email: {
email: true
}
},
submitHandler: function(form) { // <- made for AJAX
// AJAX goes here
form.ajaxSubmit({ .... });
return false;
}
});
});
В противном случае все работает нормально.Поле email
проверяется только тогда, когда оно содержит значение:
DEMO: jsfiddle.net / shLx3b65 /
ПРИМЕЧАНИЕ : Использование type="email"
практически бессмысленно при использовании плагина jQuery Validate.Этот плагин отключает все проверки HTML5, и поле ведет себя не так, как при type="text"
.Это также бессмысленно, поскольку проверка HTML5 «откат», когда JavaScript отключен, поскольку ваш Ajax все равно не будет работать без JavaScript.
EDIT :
Согласно обновлениюOP, есть синтаксическая ошибка:
email: {
required: false // <- COMMA MISSING HERE
email: true
}
Эта синтаксическая ошибка нарушает JavaScript и проверка HTML5 принимает благодаря атрибуту type="email"
... во многом как я уже говорил всамый первый абзац этого ответа.
После добавления пропущенной запятой все работает как положено:
jsfiddle.net / 8wxo4cdy /