【发布时间】:2010-12-03 08:50:49
【问题描述】:
注意:
这个问题指的是jQuery.validate()(1.5版)的一个非常旧的版本。这个插件现在提供了一个内置的解决方案:应该使用.rules() method。对于需要维护无法升级到最新版本的 jQuery 和 jQuery.validate() 的旧网站的任何人,出于历史目的,我将保留此问题和答案的原始形式。
我有一个表单可以切换可见的输入元素。我想仅验证表单上的可见元素。
我很难让它正常运行。我想禁用不可见元素的验证器,但我似乎无法找出最好的方法来做到这一点。任何对我的代码或我的方法可能有问题的见解都将不胜感激。
切换可见性时,我尝试了一些方法:
- 调用
$("form").rules("remove")清除所有现有的验证规则。这会引发“未定义”的 JavaScript 异常。 - 为可见元素调用
$("form").validation(...options...),希望这会覆盖规则。这仅允许经过验证的第一组工作。无法验证第二个面板。 - 在调用新的
validation()方法之前取消绑定提交处理程序。这并没有达到我的预期。它会永久(看似)删除所有验证,并且表单会在未经验证的情况下提交。 - 在尝试再次调用验证器之前使用
$.removeData($('form'), 'validator')清除验证对象。这也行不通。 - 这是在 ASP.NET 站点中,因此使用多个
<form />标记是不可能的,因为这会破坏页面。
我对如何完成这项工作感到有些困惑。您可以在http://jsbin.com/ucibe3 看到我所拥有的完整工作演示,或在http://jsbin.com/ucibe3/edit 进行编辑。我试图将其简化为只是导致错误的代码。
这是我的代码的关键部分(使用上面的链接获取完整的工作页面)
HTML:
<td id="leftform">
Left Form<br />
Input 1: <input type="text" name="leftform_input1" /><br />
Input 2: <input type="text" name="leftform_input2" /><br />
<input type="submit" name="leftform_submit" value="Submit Left" />
</td>
<td id="rightform" style="visibility:hidden">
Right Form<br />
Input 1: <input type="text" name="rightform_input1" /><br />
Input 2: <input type="text" name="rightform_input2" /><br />
<input type="submit" name="rightform_submit" value="Submit Right" />
</td>
JavaScript:
$('#toggleSwitch').click(function() {
if ($('#leftform').css("visibility") !== "hidden") {
$('#leftform').css("visibility", "hidden");
$('#rightform').css("visibility", "visible");
$('form').validate({
rules: {
rightform_input1: { required: true },
rightform_input2: { required: true }
},
messages: {
rightform_input1: "Field is required",
rightform_input2: "Field is required"
}
});
} else {
$('#rightform').css("visibility", "hidden");
$('#leftform').css("visibility", "visible");
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});
【问题讨论】:
-
对不起,我错过了另一个答案的标记,我在我的帖子中添加了一个可能解决方案的链接-希望它有所帮助。
-
2014 - 现在存在几个验证器插件,虽然我可以做出有根据的猜测,但不清楚这个问题指的是哪个插件。链接字体会很有用。
-
@Roamer-1888 好点。我已更新问题和答案以指定插件,以及它适用的版本,因为此问题和答案指的是插件的过时版本,不再相关。
-
谢谢丹。 StackOverflow 在这方面是其自身成功的牺牲品。随着时间的推移,越来越多的 Qs/As 将变得过时。
标签: javascript jquery validation