【发布时间】:2015-03-11 00:31:06
【问题描述】:
我是 jQuery 和 .Validate jQuery 验证插件的新手。我正在尝试将其集成到多步骤形式中。基本上,我已经根据用户按下的下一个按钮设置了一个开关,并且希望仅基于此验证表单的特定部分。
当我成功验证表单的第一部分并移至第二个字段集时,下一组字段已经出现验证错误。我尝试禁用这些字段(这会阻止我正在使用的滑块逻辑由于某种原因而无法工作),特别是告诉它按类忽略该字段集并直接声明 ignore: ":hidden" 即使它是默认行为。
我已将遇到问题的代码放在此处的 jsFiddle 中:http://jsfiddle.net/13x7Lbk7/4/(已更新)
这是我的代码中调用表单第一步验证的特定部分:
$(".next").click(function(){
// Initialize form
var form = $("#frmSignup");
// Determine which step of the form we're on
switch($(this).attr("value")) {
case "step1":
$("#frmSignup").validate({
rules: {
txtZipCode: {
required: true,
number: true,
minlength: 5,
maxlength: 5,
},
txtSchoolName: {
required: true,
minlength: 5,
},
},
messages: {
txtZipCode: {
required: "Zip Code Required",
number: "Enter a valid 5 digit zip code",
minlength: "Enter a valid 5 digit zip code",
},
txtSchoolName: {
required: "School Name Required",
},
},
});
break;
// --- SNIP ---
} // End step switch
if ($("#frmSignup").valid() == true){
// Fieldset logic is here, see jsFiddle if you're curious
} // End isValid if
}); // End click function
这里是前两个字段集的相关 HTML:
<fieldset class="fsStep1">
<h2>Step 1</h2>
<h3>Information</h3>
<label for="txtZipCode">Zip Code</label>
<input type="text" name="txtZipCode" value="" pattern="\d*" id="txtZipCode" required />
<label for="txtExample">Example Field</label>
<input type="text" name="txtExample" value="" id="txtExample" required />
<hr />
<button name="next" value="step1" class="next action-button">Next</button>
</fieldset>
<fieldset class="fsStep2">
<h2>Step 2</h2>
<h3>Example</h3>
<label for="txtInfo">Info</label>
<input type="text" name="txtInfo" id="txtInfo" value="" pattern="[a-zA-Z -]+" required />
<label for="txtOther">Other</label>
<input type="text" name="txtOther" id="txtOther" value="" pattern="[a-zA-Z -]+" required />
<hr />
<input type="button" name="previous" class="previous action-button" value="Previous" />
<button name="next" value="step2" class="next action-button">Next</button>
</fieldset>
我确定我在这里遗漏了一些愚蠢的东西,但我一直在查看代码、查看文档、搜索网络,而且我整天都在碰壁。请把我从我的谜团中解脱出来,并告诉我究竟为什么我是愚蠢的。 :) 谢谢!
【问题讨论】:
-
我以为你只有一个隐藏字段未被忽略的问题。但是,您的 jsFiddle 完全损坏了....根本没有验证。请检查错误控制台并修复语法错误。
-
这就是我遇到的问题。我只是在将 javascript 从我的实时文档复制到 jsFiddle 时犯了一个错误。对此非常抱歉。我添加了您建议的 novalidate 标签,到目前为止的行为是相同的。我会继续关注的。
-
我没有提出这个建议。 jQuery Validate 插件已经自动动态添加了
novalidate属性。 -
我也认为进一步简化 jsFIddle 以仅显示导致问题的最少量代码是一个非常好的主意。
-
你是对的。我对此很陌生,并且在自欺欺人。我现在删除了除了 2 个步骤之外的所有步骤,并取出了所有我能找到的 javascript:jsfiddle.net/13x7Lbk7/4
标签: javascript jquery forms jquery-validate