的 引用OP: 强>
“在向导插件的onLeaveStep选项中,我调用了validate插件。无论用户是否点击 next 要么 previous 验证将被触发“
next
previous
问题是 .validate() 不是“测试”表单有效性的方法。相反, .validate() 是方法 初始化 表单上的插件。你会这样做的 一旦 在页面加载和任何后续调用 .validate() 被忽略了。
.validate()
要使用jQuery Validate插件以编程方式测试表单,请使用 该 .valid() 方法 它触发测试并返回一个布尔值。
.valid()
默认情况下,jQuery Validate插件也会忽略任何“隐藏”的输入元素。因此,在使用向导插件时,您可以利用此功能。
你的DOM就绪处理程序......
$('#myform').validate({ // rules & options });
你的巫师......
onLeaveStep: function(){ $('#myform').valid(); }
否则,当我创建多步表单时,我使用一组唯一的 form 每个部分的标签。然后我用 .valid() 在移动到下一个之前测试该部分。 (不要忘记先初始化插件,然后打电话 .validate() ,当页面完全加载时,在每个表单上。)然后在最后一节,我使用 .serialize() 在所有部分上,将每个部分连接成一个要提交的数据查询字符串。
form
.serialize()
像这样......
$(document).ready(function() { $('#form1').validate({ // rules }); $('#form2').validate({ // rules }); $('#form3').validate({ // rules, submitHandler: function (form) { // serialize and join data for all forms // ajax submit return false; } }); $('#gotoStep2').on('click', function() { if ($('#form1').valid()) { // code to reveal step 2 } }); $('#gotoStep3').on('click', function() { if ($('#form2').valid()) { // code to reveal step 3 } }); // there is no third click handler since the plugin takes care of this with the // built-in submitHandler callback function on the last form. });