在尝试使用Ajax请求将表单提交到我的php脚本之前,我试图让我的表单进行验证。我已经查看了stackoverflow并找不到有用的东西。
我有3个输入和一个提交按钮:
<input type="text" name="full-name" id="full-name" value="" placeholder="Full Name" />
<input type="text" name="email" id="email" value="" placeholder="Email" />
<textarea name="message" id="message" value="" rows="8" placeholder="Message"></textarea>
<input type="submit" id="contact-submit" class="contact-submit" value="Submit">
<div id="messageResponse" class="center" style="display:none;"></div>
$(document).ready(function() {
function validator(){
return $('form').validate();
}
$('form').on('submit', function(e) {
e.preventDefault();
$.ajax({
dataType: 'html',
type: 'post',
url: 'mail.php',
data: $('#contact-form').serialize(),
beforeSubmit: validator,
success: function(responseData) {
$('#contact-submit').remove();
$('#messageResponse').fadeIn(1000);
$('#messageResponse').html(responseData);
},
error: function(responseData){
console.log('Ajax request not recieved!');
}
});
// resets fields
$('input#full-name').val("");
$('input#email').val("");
$('textarea#message').val("");
})
});
我应该使用插件吗?我想要的只是用红色边框颜色验证的名称,电子邮件和消息。它让我头疼不已,明天我会和客户见面,最终确定网站。如果我找不到合适的解决方案,我就不会提问。
我也尝试过使用它:jQuery Form Validator Plugin
答案 0 :(得分:4)
您的$('form').validate()
是否指的是jQuery Validate plugin?
如果是这样的话,当jQuery Validate插件已经内置提交事件处理程序回调函数时,使用submit
处理程序绝对没有意义,而这正是假设的地方放置你的ajax。
As per the documentation for the Validate plugin,submitHandler
回调函数是:
“在表单有效时回调处理实际提交。获取 形式作为唯一的论点。替换默认提交。 正确 在验证后通过Ajax提交表单。“
尝试使用此代码,假设您的ajax
功能正确无误:
$(document).ready(function () {
$('#myform').validate({ // initialize the plugin
// your rules and options,
submitHandler: function (form) {
$.ajax({
dataType: 'html',
type: 'post',
url: 'mail.php',
data: $(form).serialize(),
success: function (responseData) {
$('#contact-submit').remove();
$('#messageResponse').fadeIn(1000);
$('#messageResponse').html(responseData);
},
error: function (responseData) {
console.log('Ajax request not recieved!');
}
});
// resets fields
$('input#full-name').val("");
$('input#email').val("");
$('textarea#message').val("");
return false; // blocks redirect after submission via ajax
}
});
});
答案 1 :(得分:3)
beforeSubmit是malsup ajaxForm插件的一个选项,而不是jQuery ajax。仅当validator()返回true时才执行ajax。
$('form').on('submit', function(e) {
e.preventDefault();
if (validator()){
$.ajax({...});
}
});
旁白:
不要使用多行让jQuery多次选择相同的东西,而是可以使用链。
$('#messageResponse').fadeIn(1000).html(responseData);
同样,对于几个元素做同样的事情
$('#full-name, #email, #message').val("");