Я использую механизм проверки JQuery (https://github.com/posabsolute/jQuery-Validation-Engine) для одной из моих форм. Validation работает хорошо, но не в состоянии остановить форму от получения представлены даже тогда, когда значения полей не выполняют проверки:Jquery Validation Engine: Форма отправки без проверки
У меня есть форма Newsletter Sigunp следующим образом:
<form id="submit-newsletter" method="POST" action="">
<input type="text" class="searchform validate[required, custom[email]]" value="Enter Your Email" id="email" name="nw-email" onblur="defaultInput(this);" onfocu s="clearInput(this);" />
<input type="hidden" id="newsletter" name="newsletter" value="nl" />
<input type="submit" class="submit" title="Signup" value="Sign Up" name="newsletter-signup" onclick="newsletterSubscribe(event);" />
</form>
Эта форма представленный через AJAX следующим образом:
// Newsletter Subscription Without Refresh
function newsletterSubscribe(e) {
e.preventDefault();
var dataString = 'nw-email=' + $('input[name=nw-email]').val() + '&newsletter=' + $('input[name=newsletter]').val();
$.ajax({
type: "POST",
url: "/newsletter/",
data: dataString,
success: function() {
$('#newsletter-box').html('<div id="message"></div>');
$('#message').html('<img width="18px" height="18px" src="/static/img/smtick.png" /><h5>Thank You !</h5>')
.append('<p>We have recieved your request. Please Check your mail for activation instructions. You will start recieving our newsletter once you have verified t his email address.</p>')
.hide()
.fadeIn(1200);
}
});
return false;
}
Триггер проверки заключается в следующем:
$(document).ready(function() {
$('#submit-newsletter').validationEngine();
});
Теперь я вижу сообщение об ошибке проверки, но если я нажимаю кнопку отправки, форма отправляется независимо от того, что значение не является адресом электронной почты.
Любые идеи?
Спасибо. Это работает наоборот, поскольку оно проверяет, действительно ли оно он возвращает false. однако я понял, я изменил его, чтобы проверить, является ли он действительным, а затем продолжить функцию ajax else return false. Спасибо @Jason – Amyth
+1. супер решение, спасибо –
Действительно, это трюк, чтобы проверить, является ли форма действительной, но я бы привязал этот пользовательский AJAX POST к событию отправки формы, а не нажал кнопку, поскольку форма может быть отправлена даже тогда, когда пользователь попадает в любой ('submit', function (e) {e.preventDefault(); ....}) '' 'В этом случае, если триггер события будет формой, вы можете легко построить объект данных таким образом: '' 'data: $ (this) .serialize()' '' и вот оно, больше не нужно строить dataString;) – qdev