2012-07-13 146 views
33

的JavaScript位:jQuery的表单验证阿贾克斯之前提交

$(document).ready(function() 
    { 
      $('#form').submit(function(e) 
      {  

       e.preventDefault(); 
       var $form = $(this); 

       // check if the input is valid 
       if(! $form.valid()) return false; 
        $.ajax(
        { 
        type:'POST', 
        url:'add.php', 
        data:$('#form').serialize(), 
        success:function(response) 
        { 
         $("#answers").html(response); 
        } 
       });  

      }) 
    }); 

HTML位:

<input type="text" name="answer[1]" class="required" /> 
    <input type="text" name="answer[2]" class="required" /> 

所以这是我想使用的代码。这个想法是在我使用Ajax发送表单之前让所有输入得到验证。我已经尝试了很多版本,但每次我最终都会提交,即使表单没有完全填写。我所有的输入都是“必需”类。任何人都可以看到我做错了什么?

另外,我依赖于基于类的需求,因为我的输入名称是用php生成的,所以我永远无法确定我得到的是什么名称[id]或输入类型。

我在“页面”中显示/隐藏问题。

<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/> 

JS:

function toggleVisibility(newSection) 
     { 
      $(".section").not("#" + newSection).hide(); 
      $("#" + newSection).show(); 
     } 
+0

当你提交,会发生什么? – 2012-07-13 11:31:27

+0

目前我只是回应了所有$ key => $ value对,即使我只填写了1/4个问题,它们也会在屏幕上弹出。 – Tom 2012-07-13 11:32:31

+0

我无法在最新版本的jquery(v1.7.2)中找到'beforeSubmit'作为$ .ajax的有效选项。您可能想要使用最新版本的jquery。也就是说,Darin的答案是它应该如何完成。也就是说,如果你不能做他建议的事情,那么用Fliespl提出的代码替换beforeSubmit的最后一行。您需要检查'.validate()'的返回值,并相应地继续或取消ajax请求。 – 2012-07-13 11:43:14

回答

72

你可以使用submitHandler选项。基本上把$.ajax调用放在这个处理程序中,即用验证设置逻辑反转它。

$('#form').validate({ 

    ... your validation rules come here, 

    submitHandler: function(form) { 
     $.ajax({ 
      url: form.action, 
      type: form.method, 
      data: $(form).serialize(), 
      success: function(response) { 
       $('#answers').html(response); 
      }    
     }); 
    } 
}); 

jQuery.validate插件将调用如果验证通过了提交处理。

+0

但是我仍然可以在验证之前序列化#answers,或者在$ .ajax之前将其粘贴。 – Tom 2012-07-13 11:37:17

+0

没关系,现在看到了直接序列化:) – Tom 2012-07-13 11:39:12

+0

'#answers'是你的结果div。如果您想要发送表单输入字段值以及AJAX请求,请使用'.serialize()'方法,完全如我的回答中所示:'data:$(form).serialize()'=>处理程序。 – 2012-07-13 11:39:15

6

你可以尝试做:

if($("#form").validate()) { 
return true; 
} else { 
return false; 
} 
+0

简单和工作就像一个魅力! :*非常感谢^^ – Tom 2012-07-13 11:44:32

+0

哦,我一定是太累了。仍然不起作用:/ – Tom 2012-07-13 12:31:18

+0

我改变显示:我的表单上没有,因为我将它分成几个“页面”。认为可能会导致一些问题? – Tom 2012-07-13 12:39:34

3

我觉得我第一次验证表单,如果验证总会过去的,比我会让阿贾克斯后。不要忘记在脚本的末尾添加“return false”。

10

首先,您不需要明确添加classRules,因为required会被jquery.validate插件自动检测到。 所以你可以使用此代码:

  1. 的形式提交,可以防止默认行为
  2. 如果窗体是无效的停止执行。
  3. 否则如果有效发送ajax请求。

    $('#form').submit( function(e){  
    
          e.preventDefault(); 
          var $form = $(this); 
    
          // check if the input is valid 
          if(! $form.valid()) return false; 
    
          $.ajax({ 
           type: 'POST', 
           url: 'add.php', 
           data: $('#form').serialize(), 
           success: function(response) { 
            $("#answers").html(response); 
           } 
    
          }); 
         }); 
    
+0

看起来这不适用于我:/ – Tom 2012-07-13 12:32:56

+0

检查您的浏览器日志中是否有错误,您使用的浏览器是什么? – amd 2012-07-13 13:14:03

+0

我使用的是谷歌浏览器,但是我找不到任何错误。要再次尝试使用此代码。 – Tom 2012-07-13 13:40:24

4

这个具体的例子将只检查输入,但不过你可以调整它,添加这样的事情你阿贾克斯功能:

beforeSend: function() {      
    $empty = $('form#yourForm').find("input").filter(function() { 
     return this.value === ""; 
    }); 
    if($empty.length) { 
     alert('You must fill out all fields in order to submit a change'); 
     return false; 
    }else{ 
     return true; 
    }; 
}, 
3

我觉得submitHandler与jQuery验证是好的解。请从这段代码中了解一下。从@Darin季米特洛夫启发

$('.calculate').validate({ 

       submitHandler: function(form) { 
        $.ajax({ 
         url: 'response.php', 
         type: 'POST', 
         data: $(form).serialize(), 
         success: function(response) { 
          $('#'+form.id+' .ht-response-data').html(response); 
         }    
        }); 
       } 
      }); 
3
> Required JS for jquery form validation 
> ## jquery-1.7.1.min.js ## 
> ## jquery.validate.min.js ## 
> ## jquery.form.js ## 

$("form#data").validate({ 
    rules: { 
     first: { 
       required: true, 
      }, 
     middle: { 
      required: true, 
     },   
     image: { 
      required: true, 
     }, 
    }, 
    messages: { 
     first: { 
       required: "Please enter first", 
      }, 
     middle: { 
      required: "Please enter middle", 
     },   
     image: { 
      required: "Please Select logo", 
     }, 
    }, 
    submitHandler: function(form) { 
     var formData = new FormData($("#image")[0]); 
     $(form).ajaxSubmit({ 
      url:"action.php", 
      type:"post", 
      success: function(data,status){ 
       alert(data); 
      } 
     }); 
    } 
}); 
+0

这个答案相当清楚地解释了初学者......谢谢! 但是,这也验证了文件附件!怎么样 !! – 2018-03-03 07:43:29

0

形式本地JavaScript checkValidity功能更多的则是足以引发HTML5验证

$(document).ready(function() { 
    $('#urlSubmit').click(function() { 
     if($('#urlForm')[0].checkValidity()) { 
      alert("form submitting"); 
     } 
    }); 
});