使用jQuery验证插件验证表单的子集
我的HTML表单有许多div,它们是向导的步骤。单击“下一步”按钮后,我只想验证活动div。我正在使用jQuery.validate.js插件 每个div都有一个ID,所以我想用一种方式说:使用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
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上有一个示例(当前由于内容混合而中断)。但这是特定于必填字段的。