验证分隔的选项卡Jquery Validator插件

时间:2013-11-28 04:19:38

标签: jquery jquery-validate

我正在使用下一个Jquery Validator脚本;

jQuery.validator.addMethod("letras", function (value, element) {
    return this.optional(element) || value == value.match(/^[a-zA-Z ñÑáéíóúüç]+$/);
}, "Only letters.");

$(document).ready(function () {

        $('#inscripcion').validate({

                errorClass: 'form-control-error',
                validClass: 'form-control-sucess',
                ignore: "",

                submitHandler: function (form) {
                    if ($("#inscripcion").validate() == true) {
                        alert("Form not completed");
                    } else {
                        form.submit();
                    }
                },

                rules: {

                    nombrer: {
                        minlength: 2,
                        letras: true,
                        required: true
                    },
                    apellidor: {
                        minlength: 2,
                        required: true
                    },
                    cedular: {
                        minlength: 7,
                        number: true,
                        required: true
                    },

                    highlight: function (element) {
                        $(element).closest('.form-group').removeClass('has-success').addClass('has-error');
                    },

                    success: function (element) {
                        $(element).closest('.form-group').removeClass('has-error').addClass('has-success');

                    }
                });
        }); // end document.ready

    $('#menu a[href="#estudiante"]').click(function (event) {
        var estado = $('#inscripcion').valid();
        if (estado == false) {
            alert("You miss some data please complete it");
        }
    });

    $('#botonestu').click(function (event) {
        var estado = $('#inscripcion').valid();
        if (estado == false) {
            alert("You miss some data please complete it");
        }
    });

问题在于,如果我使用'ignore:“”,'即使指定的标签已满,当有人点击标签或按钮时我所做的事件也会激活。但是,如果我删除某人可以直接单击提交按钮,它将提交整个表单,即使它是完全空的。而且,即使是form.submit(),提交手册中的“警报”也不起作用。

1 个答案:

答案 0 :(得分:0)

您的代码:

submitHandler: function (form) {
    if ($("#inscripcion").validate() == true) {
        alert("Form not completed");
    } else {
        form.submit();
    }
},
    在这种情况下,
  • $("#inscripcion").validate()完全没有意义。 .validate()只是插件的初始化方法, 测试方法。多次拨打.validate()将无效。

  • 根据文档, submitHandler仅在表单有效时单击提交按钮时触发这表示测试submitHandler内的有效性是多余的。换句话说,submitHandler中的此测试毫无意义,因为无论何时评估if valid语句,表单 都已有效。

  • 如果你只想做form.submit(),那么需要删除整个submitHandler回调选项。这是您不需要覆盖的插件的默认行为。通常,当您希望使用submitHandler提交表单数据和/或在表单有效时执行其他操作时,将使用.ajax()回调。


但是,如果您尝试enable validation of hidden fields, use ignore: [],我不确定您希望使用ignore: ""实现什么目标。否则,如果您希望忽略隐藏字段以进行验证,请完全删除ignore选项,因为这已经是插件的默认行为。


您还错误地highlightsuccess置于rules内以及rules上缺少右括号:

$(document).ready(function () {

    $('#inscripcion').validate({
        // your other options,
        rules: {
            nombrer: {
                ...
            },
            ....
            highlight: function (element) { // <- incorrectly placed inside "rules" option
                $(element).closest('.form-group').removeClass('has-success').addClass('has-error');
            },
            success: function (element) {  // <- incorrectly placed inside "rules" option
                $(element).closest('.form-group').removeClass('has-error').addClass('has-success');

            }
        // <- missing a closing brace "}" here
    });

}); // end document.ready 

以下是您的代码的工作版本:http://jsfiddle.net/yyxLs/