表单不完整时提交jQuery验证表单

时间:2012-11-27 12:15:42

标签: javascript jquery unobtrusive-validation

我正在使用MVC3和不引人注意的验证。在某些情况下,即使表格不完整,我也要提交表格,前提是选择了两个字段。我使用的JavaScript如下:

$('#form_section11').submit(function () {
        //event.preventDefault(); //stops form from submitting immediately 

        var validatorSection11 = $('#form_section11').validate();

        if (!$(this).valid()) {
            // or family name and date of birth
            var FamilyNameExists = true;
            var DateOfBirthExists = true;                

            if (validatorSection11.errorMap["FamilyName"]) { FamilyNameExists = false; }
            if (validatorSection11.errorMap["DateOfBirth"]) { DateOfBirthExists = false; }                

            // show the partial save rules
            $('#ParitalSaveIntructions').show();
            // show the partial save checkbox
            if (FamilyNameExists && DateOfBirthExists) {

                $("#AgreePartialSave").show();

                if ($("#PartialSave").is(':checked')) {
                    //  partial save has been requested
                    return true;    //// <- save not happening, INCORRECT action
                }
                // clear perinatalWomanView_PartialSave
                $("#PartialSave").removeAttr('checked');
            }
            return false;   // <- save not happening, correct action
        } 
        return true;    // <- save happens, correct action
    });

向用户显示一个复选框以确认提交不完整。我已经指出了JavaScript的工作原理以及失败的地方。

我还添加了

var validatorSection11 = $('#form_section11').validate(
            {
                onsubmit: false
            }
        );

这没有效果。我的问题是:

为什么原始return true无效? 我正确使用onsubmit: false吗? 有没有更好的方法呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

尝试使用变量(save)而不是多个return语句:

$('#form_section11').submit(function (e) {
    'use strict';
    var self = $(this),
        save = false,
        FamilyNameExists = true,
        DateOfBirthExists = true,
        validatorSection11 = self.validate();
    if (!self.valid()) {
        // or family name and date of birth
        FamilyNameExists = true;
        DateOfBirthExists = true;
        if (validatorSection11.errorMap["FamilyName"]) {
            FamilyNameExists = false;
        }
        if (validatorSection11.errorMap["DateOfBirth"]) {
            DateOfBirthExists = false;
        }
        // show the partial save rules
        $('#ParitalSaveIntructions').show(); // should this be "Parital" or "Partial"
        // show the partial save checkbox
        if (FamilyNameExists && DateOfBirthExists) {
            $("#AgreePartialSave").show();
            //if ($("#PartialSave").is(':checked')) { // Comment in answer
            //    // partial save has been requested
            //    save = true;
            //}
            save = $("#PartialSave").is(':checked');
            // clear perinatalWomanView_PartialSave
            $("#PartialSave").removeAttr('checked');
        }
        //save = false; //This was overriding the `save = true` above.
    }
    if (!save) {
        e.preventDefault(); // stops form from submitting immediately 
    }
    return save;
});

此外,在“回答评论”部分,此部分可能只会在重新提交表单后执行,因为必须执行以下操作:

  1. $("#AgreePartialSave").show();必须执行并显示该部分。
  2. 用户必须勾选“{1}} $("#PartialSave")才能返回$("#PartialSave").is(':checked')
  3. true必须再次触发要评估的处理程序部分。
  4. 如果用户必须单击以执行部分​​保存的其他按钮,您可能希望将整个部分移动到该按钮处理程序中。