Jquery验证不会阻止表单提交

时间:2011-12-30 00:50:36

标签: php jquery html jquery-validate

我正在使用jquery验证1.9.0。我使用了最新的Jquery并返回1.6.0。结果没有变化

我的问题是:当我故意输入错误的值(没有足够的字符等)时,验证脚本会正确地显示错误,但仍允许提交脚本。 我尝试过验证方法,包括添加规则,规则和下面非常简单的表单类型。

<script>
jQuery.validator.setDefaults({
debug: true,
success: "valid"
});
</script>

<script>
$(function() {    
$("#comm").validate();

});
</script>

表格

<form action="comm.php" method="post" name="comm" id="comm">
Name: <input type="text" name="name" id="name"  minlength="3" class="required"  /> 
Email:<input type="email" name="email" id="email" class="required email" /> <br />
<label for="comment"> Comment </label> <br />

<textarea name="comment" id="comment" cols="80" rows="5" minlength="6" class="required" /></textarea> 
<?php
 date_default_timezone_set('America/New_York');
 $date = date("Y-n-j h:i:s");?>

 <input type="hidden" name="date" id="date" value="<?php echo $date; ?>" /> 
 <?php $post_id = $id;?>
 <input type="hidden" name="post_id" id="post_id" value="<?php echo $post_id; ?>" /> 
 <?php $ip = $_SERVER["REMOTE_ADDR"]; ?>

 <input type="hidden" name="ip" id="ip" value="<?php echo $ip; ?>" /> 

 <input type="submit" value="Post" name="post" id="post" /> <input type="reset" value="Reset Form" name="reset" id="reset" />
</form> 

非常简单的东西。

提交在网络上的所有表单上发生,并且所有表单都在localhost上发生。我总能发现错误,但永远不会阻止它们。我做错了什么?

Firebug显示我正确提交并且没有脚本错误。所有jquerys都连接在一起。 Firebug还在html表单中提交 novalidate =“novalidate”后向我显示。使用onsubmit = return false不会改变任何内容

我使用ajax提交表单,完美无缺地工作

$(function() {
    $("#comm").submit(function() {      
      var data = $('#comm').serialize();
      alert (data); return false;


        $.ajax({
            url: "comm.php",
            data: data,
            type: "POST",
            success: function(msg){
                if(msg){
                    $('.comme').prepend().html(msg).show();
                }else{
                    $('.comme').text("nothing came back");
                }
            }
        });
        return false;
    });
});

谢谢

2 个答案:

答案 0 :(得分:3)

单击“提交”按钮后尝试进行Ajax处理,而不是使用jQuery表单提交,或许只是通过Ajax提交表单数据。

$(function() {
  $("#post").click(function() {
    var data = $('#comm').serialize();

    // TODO: validate your data - $("#comm").validate();

    // TODO: submit your form though ajax

    // Other operations on form data

    return false;
  });
});

注意:如果通过页面重定向进行表单提交,请尝试使用&#39; onsubmit = return false;&#39;。

<强>更新

我似乎已经从验证功能的提交回调处理程序( submitHandler )提交了FORM,以避免提交后的重定向。请尝试检查this演示示例,该示例适用于Ajax表单提交,查看此示例页面的源代码,然后相应地调整代码。

var v = jQuery("#form").validate({
  submitHandler: function(form) {
    jQuery(form).ajaxSubmit({
      target: "#result"
    });
  }
});

答案 1 :(得分:1)

如果您在提交表单时使用jigery接收表单,那么您应该指定包含jquery代码的php文件作为表单的操作,而不是“监听”提交事件。另一个选择是让'action'参数为空。这里的要点是您要发送两次表单:当您单击峰值时,表单会自动发送到'action'参数中指定的文件(即正在进行的提交,因为它没有验证) ;并且,在您单击“提交”的同时,它还会触发ajax请求,该请求将执行验证,如果成功,则再次执行提交。