【问题标题】:Jquery Validation not preventing form submissionJquery Validation 不会阻止表单提交
【发布时间】:2011-12-30 00:50:36
【问题描述】:

我正在使用 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> 

非常简单的东西。

提交发生在我在网上的所有表单上,并且都在本地主机上。我总能发现错误,但从不阻止它们。我做错了什么?

Firebug 显示我正确提交并且没有脚本错误。所有 jquery 也都已连接。 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;
    });
});

谢谢

【问题讨论】:

    标签: php jquery html jquery-validate


    【解决方案1】:

    尝试在单击提交按钮后进行 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;
      });
    });
    

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

    更新:

    看来您必须从验证函数的提交回调处理程序(submitHandler)提交 FORM,以避免提交后重定向。请尝试检查 this 演示示例,该示例在 Ajax 表单提交中运行良好,查看此示例页面的源代码,然后相应地调整您的代码。

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

    【讨论】:

    • 无论如何数据/表单处理应该只在点击提交按钮后完成,对吧?
    • 今晚会比你试一试
    • 我会给你检查答案,但问题没有解决。无论我是在本地主机上、在网络上还是在我的 codeigniter 站点上,我都无法让这个插件在出错时停止提交。即使我直接使用 Jquery 站点上的基本示例。当 Jquery 1.6.1 出来并且从那以后一直没有工作时,这种情况就开始发生了。感谢您的努力
    • 我检查了 jQuery validate 插件的 ajax 提交示例演示,看来您必须将提交处理代码作为回调移动到 'validate()' 函数以避免重定向。尝试使用演示页面后更新了我的答案,请检查我的答案的“更新”部分,然后再试一次。希望你这次能成功……
    【解决方案2】:

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

    【讨论】:

    • 我从表单中删除了操作,而不是从 jquery 脚本中删除了
    • 把ajax请求封装在这个里面怎么样:if($("#comm").validate()){ //ajax request}
    • 仍然没有什么不同。非常令人困惑。我什至把它带回 jquery 1.5.0
    • 那么我不知道出了什么问题,除了我在回答中告诉你的。也许你可以开始赏金来重新关注这个问题。
    • 感谢您的努力,Alfredo,非常感谢
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多