Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery验证插件验证表单的子集_Jquery_Jquery Validate - Fatal编程技术网

使用jQuery验证插件验证表单的子集

使用jQuery验证插件验证表单的子集,jquery,jquery-validate,Jquery,Jquery Validate,我的HTML表单有许多div,它们是向导的步骤。单击“下一步”按钮后,我只想验证活动div。我正在使用jQuery.validate.js插件 每个div都有一个ID,所以我想用一种方式说: wizardForm.validate().element('#first-step :input') 但这只验证第一个输入,而不是所有输入。 如何验证div中的所有输入?根据jAndy的建议,我创建了以下帮助函数: jQuery.validator.prototype.subset = function

我的HTML表单有许多div,它们是向导的步骤。单击“下一步”按钮后,我只想验证活动div。我正在使用jQuery.validate.js插件

每个div都有一个ID,所以我想用一种方式说:

wizardForm.validate().element('#first-step :input')
但这只验证第一个输入,而不是所有输入。
如何验证div中的所有输入?

根据jAndy的建议,我创建了以下帮助函数:

jQuery.validator.prototype.subset = function(container) {
    var ok = true;
    var self = this;
    $(container).find(':input').each(function() {
        if (!self.element($(this))) ok = false;
    });
    return ok;
}
用法:

if (wizardForm.validate().subset('#first-step')) {
    // go to next step
}

我尝试了这个解决方案,但对我无效。下面是我如何使用jquery.validation插件实现相同行为的

验证器:

var form = $('#form');

    // init validator obj and set the rules
    form.validate({
        errorElement: 'span', //default input error message container
        errorClass: 'help-inline', // default input error message class
        focusInvalid: false, // do not focus the last invalid input
        ignore: "",
        rules: {
            // the rules, as usual
        },

        highlight: function (element) { // hightlight error inputs
            $(element).closest('.control-group').addClass('error'); // set error class to the control group
        },

        unhighlight: function (element) { // revert the change dony by hightlight
            $(element)
                .closest('.control-group').removeClass('error'); // set error class to the control group
        }
    });
使用

以下是我验证每个步骤的方式:

$('#step :input').valid()

工作起来很有魅力

如果您查看选项之一是
忽略
,默认情况下,这将阻止验证器尝试验证与CSS伪类
:hidden
匹配的任何字段。我将其与结合使用,并通过以下操作阻止向导进入下一步:

$( '#wizard' ).wizard().on( 'change', function( event, info ) {
    if ( ! $( '#wizard_form' ).valid() ) event.preventDefault();
});

回答得好。我认为这个功能应该是插件本身的。是我在项目中使用的一个解决方案(在看到这个之前),它使用了ignore选项和jquery:not selector这很好,但是如果我不想使用它,那么它就不会“验证”。我的意思是-如果我使用if中包装的form.validate().subset('.container')方法,它就可以工作。如果我只是尝试验证表单form.validate();-包裹在相同的IF中,它不再工作了。知道为什么吗?非常感谢。这是如何验证表单的一部分的?jqueryvalidation.org/files/demo/multipart上有一个示例(当前由于内容混合而中断)。但这是特定于必填字段的。