jquery验证问题

jquery验证问题,jquery,validation,Jquery,Validation,我有一个表格,它是一个excel电子表格,有650个字段。我需要验证两个必填字段。另外,我想通过在第一次单击时隐藏“保存”按钮来防止多个表单提交 我有以下资料: $('#btnSave').click(function() { $('#formSub').hide(); $('#bidForm').validate({ rules: { vendorName: { required:t

我有一个表格,它是一个excel电子表格,有650个字段。我需要验证两个必填字段。另外,我想通过在第一次单击时隐藏“保存”按钮来防止多个表单提交

我有以下资料:

$('#btnSave').click(function() {
    $('#formSub').hide();                        
    $('#bidForm').validate({
        rules: {
                vendorName: { required:true }
        },
        messages: {
                vendorName:  "Vendor Name is required!"
        }
    }).form();  

    if ($("#bidForm").valid()) {
        $("#formSub").html('<table style="font-size:11px;"><tr><td><img src="images/ajax-loader.gif" border="0"></td><td>&nbsp;&nbsp;Saving! Please wait...</td></tr></table>');

        var options = {
                success:function() {
                    $("#formSub").html('<input type="button" name="btnBFGoBack" id="btnBFGoBack" class="submitButton btnGoBack" value="Go Back" style="float:left; margin-right:20px;" /><input type="button" name="btnSave" id="btnSave" class="submitButton save" value="Save" style="float:right;" />'); 
                },
                url:'saveForm.cfm'
        };
        $("#bidForm").ajaxSubmit(options);
        return false;
    }
}); 
$('#btnSave')。单击(函数(){
$('#formSub').hide();
$(“#bidForm”)。验证({
规则:{
vendorName:{必需:true}
},
信息:{
vendorName:“需要供应商名称!”
}
}).form();
如果($(“#bidForm”).valid()){
$(“#formSub”).html(‘正在保存!请稍候……’);
变量选项={
成功:函数(){
$(“#formSub”).html(“”);
},
url:'saveForm.cfm'
};
$(“#投标格式”).ajaxSubmit(选项);
返回false;
}
}); 
我有两个问题

  • 单击“保存”按钮后,大约需要4-5秒才会显示“正在保存!请稍候”。我不明白为什么
    $(“#formSub”).html('正在保存!请稍候…'); 不会立即触发

  • btnBFGoBack具有单击功能。在我用$(“#formSub”).html()显示按钮后,单击功能不再工作


  • 由于表单中有这么多字段,validate()是否有问题?如何确保“保存”按钮被隐藏、验证两个字段并再次显示“保存”按钮

    您不应该在单击事件之后调用validate,但在加载页面并使用submitHandler发送ajax请求之后:

    $(document).ready(function(){
        $('#bidForm').validate({
            rules: {
                    vendorName: { required:true }
            },
            messages: {
                    vendorName:  "Vendor Name is required!"
            },
            submitHandler: function(form) {
                // handler body
            }
        });  
    });
    

    没有测试用例很难猜测。

    设置验证操作页面加载,而不是在提交处理程序上。还通过附加提交处理程序。对于你正在做的事情来说,似乎还有很长一段时间。也许在validate js文件中调试一下,确保它没有循环表单中的所有字段

    $(function(){ // ready
        $('#bidForm').validate({/*options*/
            submitHandler: function(form){
                //send ajax here
            }
        });
    })
    

    当我有600多个formfield并且只需要验证1或2个字段时,使用验证插件是不实际的。因此:

     $('#btnSave').click(function() {
         if ( $('#vendorName').val() == '') {
             $('#vendorErr').html('Please pick a vendor!');
         } else {
            $("#formSub").html('<table style="font-size:11px;"><tr><td><img src="images/ajax-loader.gif" border="0"></td><td>&nbsp;&nbsp;Saving! Please wait...</td></tr></table>');
    
            var options = {
                success:function() {
                    $("#formSub").html('<input type="button" name="btnBFGoBack" id="btnBFGoBack" class="submitButton btnGoBack" value="Go Back" style="float:left; margin-right:20px;" onclick="goBack();" /><input type="button" name="btnSave" id="btnSave" class="submitButton save" value="Save" style="float:right;" />'); 
                },
                url:'saveForm.cfm'
            };
            $("#bidForm").ajaxSubmit(options);
    
        }
    }); 
    
    $('#btnSave')。单击(函数(){
    if($('#vendorName').val()=''){
    $('#vendorErr').html('请选择一个供应商!');
    }否则{
    $(“#formSub”).html(‘正在保存!请稍候……’);
    变量选项={
    成功:函数(){
    $(“#formSub”).html(“”);
    },
    url:'saveForm.cfm'
    };
    $(“#投标格式”).ajaxSubmit(选项);
    }
    }); 
    
    如果您有很多字段,并且只想使用validate插件验证2个字段,则可以添加一个“ignore”类,告诉validate插件不应验证特定字段。这将加快进程,您仍然可以使用所有其他漂亮的validate插件功能。

    我通过在按钮上添加onclick=“goBack();”解决了第二个问题。我仍然很好奇为什么click()事件没有第二次触发。1。将“saving!please wait”消息移动到valid()调用之前?这种方法的问题是我找不到带有validate plugin的beforeSubmit函数。我需要隐藏“保存”按钮,这样人们就不会一直点击它了。@FALCONSEYE-验证不是需要时间的部分。这是ajax请求。这是您应该禁用按钮的地方。正如您所说,在submit handler.js中,我认为validate.js正在表单字段中循环。如果我删除validate并为$('#vendorName').val()=''添加一个简单的if语句,它根本不会等待。根据firebug,ajax请求只需要81毫秒。一定是650多个字段减慢了速度。您是否可以将您试图验证的两个字段以各自的形式包装起来?您可以将这些值复制到其他形式的隐藏字段中。或者像
    $('#vendorName').val()那样手动验证