为什么在触发jQuery Validate submitHandler之前必须提交两次?

为什么在触发jQuery Validate submitHandler之前必须提交两次?,jquery,jquery-plugins,jquery-validate,Jquery,Jquery Plugins,Jquery Validate,我遇到过这样的情况:使用jQuery验证插件1.9.0验证HTML表单。(我正在使用jquery1.6.4)。 如果页面加载后表单填写正确,则在提交时进行验证。验证会给出一条成功消息,但不会触发submitHandler。 仅当您再次按下submit按钮时,它才会触发submitHandler 我在上创建了一个模拟来说明这个问题。 有人能告诉我如何解决这个问题吗 <form method="post" id="form"> <input id="E_Mail" name

我遇到过这样的情况:使用jQuery验证插件1.9.0验证HTML表单。(我正在使用jquery1.6.4)。 如果页面加载后表单填写正确,则在提交时进行验证。验证会给出一条成功消息,但不会触发submitHandler。 仅当您再次按下submit按钮时,它才会触发submitHandler

我在上创建了一个模拟来说明这个问题。 有人能告诉我如何解决这个问题吗

<form method="post" id="form">
    <input id="E_Mail" name="E_mail" title="E_mail" required="required" /><br />
    <input class="submit" type="submit" value="Send"/>
</form>

<script>
    jQuery(function($) {
        $("#form").submit(function(e) {
            var $form = $(this);
            alert('Start Validation');
            $form.validate({
                debug: false,
                focusInvalid: false,
                onfocusout: false,
                onkeyup: false,
                onclick: false,
                rules:
                {
                    E_mail: {required:true, email:true },
                },
                success: function(label) {
                    alert('succes:' + label);
                },
                submitHandler: function(form){
                    alert('start submitHandler');
                    postContent('test');
                    alert('end submitHandler');
                },
                invalidHandler: function(form, validator) {
                    alert('invalidHandler');
                },
            }).form();
            alert('end Validation');
            e.preventDefault();
        });
    });

    function postContent(postData){
        alert('postcontent: ' + postData);
    }
</script>


jQuery(函数($){ $(“#表格”)。提交(功能(e){ var$form=$(此); 警报(“启动验证”); $form.validate({ 调试:错误, 焦点无效:错误, onfocusout:false, onkeyup:false, onclick:false, 规则: { 电子邮件:{required:true,email:true}, }, 成功:功能(标签){ 警报(“成功:”+标签); }, submitHandler:函数(表单){ 警报(“启动提交程序”); 后内容(“测试”); 警报(“结束提交者”); }, invalidHandler:函数(表单、验证器){ 警报(“invalidHandler”); }, }).form(); 警报(“结束验证”); e、 预防默认值(); }); }); 功能后内容(postData){ 警报('postcontent:'+postData); }
在您提交表单之前,不会调用
验证
。第一次点击
submit
,验证尚未应用于表单。第二次

您应该将调用移动到
validate
submit
处理程序之外:

jQuery(function ($) {
    $("#form").validate({
        debug: false,
        focusInvalid: false,
        onfocusout: false,
        onkeyup: false,
        onclick: false,
        rules:
        {
            E_mail: {required:true, email:true },
        },
        success: function(label) {
            alert('succes:' + label);
        },
        submitHandler: function(form){
            alert('start submitHandler');
            postContent('test');
            alert('end submitHandler');
        },
        invalidHandler: function(form, validator) {
            alert('invalidHandler');
        },
    });
});
一切都会好起来的

更新示例: