jQuery验证程序插件+;ajax提交不起作用

jQuery验证程序插件+;ajax提交不起作用,jquery,ajax,jquery-validate,Jquery,Ajax,Jquery Validate,我使用basistance.de中的jQuery验证插件(1.11)并通过php提交。 现在,我在JavaScript代码末尾的submit处理程序中添加了一个ajax调用,但该调用不起作用,firebug控制台也不存在 案例1如果我将ajax调用放在站点的开头,它会工作,但验证程序插件不再出现 案例2如果我将调用放在提交处理程序中,它就不存在,表单由php提交 案例3如果我将代码放在页面末尾,那么联系人表单仍然由php提交 以下是ajax调用: $("#contactform").submit

我使用basistance.de中的jQuery验证插件(1.11)并通过php提交。 现在,我在JavaScript代码末尾的submit处理程序中添加了一个ajax调用,但该调用不起作用,firebug控制台也不存在

案例1如果我将ajax调用放在站点的开头,它会工作,但验证程序插件不再出现

案例2如果我将调用放在提交处理程序中,它就不存在,表单由php提交

案例3如果我将代码放在页面末尾,那么联系人表单仍然由php提交

以下是ajax调用:

$("#contactform").submit(function(e){
    e.preventDefault();
    $.ajax({
        type: "POST",
        url: "formfiles/submit.php",
        data: $(this).serialize(),
        success: function() {
            $('#contactform').html("<div id='message'></div>");
            $('#message').html("<h2>Your request is on the way!</h2>")
            .append("<p>someone</p>")
            .hide()
            .fadeIn(1500, function() {
                $('#message').append("<img id='checkmark' src='images/ok.png' />");
            });
        }
     });
     return false;
});
$(“#联系人表单”)。提交(功能(e){
e、 预防默认值();
$.ajax({
类型:“POST”,
url:“formfiles/submit.php”,
数据:$(this).serialize(),
成功:函数(){
$('#contactform').html(“”);
$(“#message”).html(“您的请求正在处理中!”)
.append(“某人”

”) .hide() .fadeIn(1500,函数(){ $(“#消息”)。追加(“”); }); } }); 返回false; });
有人知道怎么了吗

提前谢谢你的帮助,我为此绞尽脑汁

编辑为了更好地理解问题,下面是完整的javascript

    $(document).ready(function(){
$("#contactform").validate();      
$(".chapta").rules("add", {maxlength: 0});     



var validator = $("#contactform").validate({

     ignore: ":hidden",
    rules: {
        name: {
            required: true,
            minlength: 3
        },
        cognome: {
            required: true,
            minlength: 3
        },
        subject: {
            required: true,

        },



        message: {
            required: true,
            minlength: 10
        }
    },

    submitHandler: function(form) {



   $("#contactform").submit(function(e){
   e.preventDefault();
   $.ajax({
    type: "POST",
    url: "formfiles/submit.php",
    data: $(this).serialize(),
    success: function() {
        $('#contactform').html("<div id='message'></div>");
        $('#message').html("<h2>Your request is on the way!</h2>")
        .append("<p>someone</p>")
        .hide()
        .fadeIn(1500, function() {
            $('#message').append("<img id='checkmark' src='images/ok.png' />");
        });
    }
    });
    return false;
 });
    },

});

 });
$(文档).ready(函数(){
$(“#contactform”).validate();
$(“.chapta”).rules(“添加”,{maxlength:0});
var验证程序=$(“#contactform”)。验证({
忽略:“:隐藏”,
规则:{
姓名:{
要求:正确,
最小长度:3
},
cognome:{
要求:正确,
最小长度:3
},
主题:{
要求:正确,
},
信息:{
要求:正确,
最小长度:10
}
},
submitHandler:函数(表单){
$(“#联系表格”)。提交(功能(e){
e、 预防默认值();
$.ajax({
类型:“POST”,
url:“formfiles/submit.php”,
数据:$(this).serialize(),
成功:函数(){
$('#contactform').html(“”);
$(“#message”).html(“您的请求正在处理中!”)
.append(“某人”

”) .hide() .fadeIn(1500,函数(){ $(“#消息”)。追加(“”); }); } }); 返回false; }); }, }); });
编辑2

选择器和所有其他的似乎都很好

 <form action="#n" class="active" method="post" name="contactform" id="contactform">

您必须将代码放入document ready回调中,以确保DOM(您的表单)在加载之前已加载

$(document).ready(function() {
 //Code
});
您必须从
submitHandler
中删除现有的
.submit()
,并将其放置在验证初始化之外的
ready
内部。然后在
submitHandler
中,只调用
form.submit()
使用
form.submit()
触发
submit
,然后触发另一个

或者将
$.ajax
直接放入
submitHandler


按照现在的方式,您只需在单击submit按钮时添加事件侦听器。那真是太晚了。在这之后,表单将直接在没有ajax的情况下提交

您的
ajax
属于jQuery验证插件的
submitHandler
回调函数

,

submitHandler,回调,默认:默认(本机)表单提交

回调,用于在表单提交时处理实际提交 有效。获取窗体作为唯一参数。替换默认值 提交提交表单后通过Ajax提交表单的正确位置 已验证

另一个问题是调用
.validate()
两次。在第一次调用它之后,另一个实例将被忽略,您试图传递给它的所有规则也将被忽略。DOM准备初始化表单上的插件时,会调用一次
.validate()
方法

最后,您不需要将
submit
处理程序放入
submitHandler
回调函数中

演示:

$(文档).ready(函数(){
$(“#联系人表单”)。验证({
忽略:“:隐藏”,
规则:{
姓名:{
要求:正确,
最小长度:3
},
cognome:{
要求:正确,
最小长度:3
},
主题:{
必填项:true
},
信息:{
要求:正确,
最小长度:10
}
},
submitHandler:函数(表单){
$.ajax({
类型:“POST”,
url:“formfiles/submit.php”,
数据:$(表单).serialize(),
成功:函数(){
$(form.html(“”);
$(“#message”).html(“您的请求正在处理中!”)
.append(“某人”

”) .hide() .fadeIn(1500,函数(){ $(“#消息”)。追加(“”); }); } }); return false;//由于使用了ajax,所以需要阻止正常提交 } }); });
这很容易。只有这样做

if ( $( "label.error" ).length===false || $( "label.error" ).is(":visible")===false) {

here set the ajax

}

在插件外部,调用位于
.ready(function())内部
,它在站点的开头工作。但是,在站点的结尾和提交处理程序中,它不工作。jquery验证和提交处理程序的初始化都必须在ready回调中。如果这不起作用,你必须发布整个代码。看看我更新的答案,我很确定这能解决问题你的问题。我已经将整个ajax调用放入提交处理程序,但仍然不起作用。Firebug控制台没有显示任何内容,ca
if ( $( "label.error" ).length===false || $( "label.error" ).is(":visible")===false) {

here set the ajax

}