jquery.validate验证非活动选项卡

时间:2013-06-10 07:25:25

标签: jquery jquery-validate jquery-ui-tabs

我有一个使用jQuery UI based tab来组织不同字段的表单。我正在使用jquery.validate.min.js进行验证。例如,某些字段具有class =“required”,其通知插件以进行必要的字段验证。最后,在表单提交之前,我验证表单以确保所有输入都是正确的。一个简单的用法,如 -

HTML

...
<input type="text" class = "required" ...

SCRIPT

...
$("#frmClaim").validate();//to initilize validation
...
$('#frmClaim').submit(function () {            
             if($(this).valid())
                { ... }
         });
...

我面临的问题是,如果我在标签3上并且标签2上有一个“必填”字段,用户尚未填充,则不会执行验证。验证仅触发可见的字段 - 即活动字段。这可能还是我错过了什么?

目前,在提交时我手动激活每个标签,执行.valid并继续。有更好的解决方法吗?

4 个答案:

答案 0 :(得分:14)

像这样初始化验证以验证隐藏的字段

$("#frmClaim").validate( 
 { ignore: [] }
);

答案 1 :(得分:2)

我找到了一个适合我的解决方案。我们的想法是迭代所有选项卡,在表单上调用validate并在找到无效选项卡时停止,或者如果没有无效字段则提交表单。

$("#my_form").validate({
        submitHandler: function (form, evt) {
            var f = $(form);
            var tab = $("#my_tab_id");
            var tabs_count = tab.children('ul').children('li').length;
            var active = tab.tabs('option', 'active');
            var invalid = false;
            var validated = 0;

            while (validated < tabs_count && !invalid) {
                if (!f.valid()) {
                    invalid = true;
                    break;
                }

                active++;
                active = active % tabs_count;
                tab.tabs('option', 'active', active);

                validated++;
            }

            if (!invalid)
                form.submit();
            else
                evt.preventDefault();
        },
        rules: {
            ...
        },
        messages: {
            ...
        }
    });

答案 2 :(得分:0)

试试吧,

var frmCl=$("#frmClaim").validate();//to initilize validation
...
$('#frmClaim').submit(function () { 
     if($(frmCl).valid())
         { ... }
});

答案 3 :(得分:0)

试试这个:

function saveStuff() {

    $.validator.unobtrusive.parse('#FORMID');

    var data = {};

    var anyError = false;

    var _frm = $('#FORMID');

    var _validator = _frm.data('validator');
    _validator.settings.ignore = "";

    _frm.find('input, select, textarea').each(function () {
        if (!_validator.element(this)) {
            anyError = true;
        }
    });

    if (anyError) {
        return false;
    }

    //SAVE DATA CODE HERE
}