我有一个多页表单,我试图使用jquery验证进行验证。用户基本上有4个选项:next
,prev
,save
,submit
。
save
,next
和prev
都将当前页面保存为整个表单; submit
与save
相同,但会触发一些与工作流相关的其他功能,然后转到网站的其他部分。
我需要始终验证用户输入。 jquery验证工作得很好。但是......我需要根据需要设置一些字段。因为表单是在每一步保存的,所以输入需要始终有效,但我不需要在最后(submit
)之前进行必要的验证。
表单正在构建一个特定于其所在页面的验证的动态列表,例如:
$(document).ready(function() {
$("#ctl01").validate({ onsubmit: false });
$("#_Qn_0e868ebe").rules("add", { maxlength: 200 });
$("#_Qn_d69e75a4").rules("add", { number: true });
$("#_Qn_adffbdec").rules("add", { maxlength: 200 });
$("#_Qn_adffbdec").rules("add", { digits: true });
});
现在,对于必填字段,我已经为它们添加了一个.isrequired
类,并且我已经将<asp:linkbutton>
解耦为触发此客户端脚本:
function FormIsValid(sender, ishardsubmit) {
var form = $("#ctl01");
form.validate();
if (form.valid()) {
//if (ishardsubmit) {
// if (!IsRequiredValid()) { return false; }
//}
__doPostBack(sender, '');
}
return;
}
这部分(输入验证部分)到目前为止工作得很好。我评论的部分是工作不那么好的部分。它触发了这个函数,我试图动态添加所需的验证器并重新评估表单。我可以看到它为我的每个必填字段点击.each循环,但它似乎没有工作,因为它传回true
,即使必填字段为空。
function IsRequiredValid() {
var $requiredgroup = $(".isrequired");
$requiredgroup.each(function (i, item) {
$(item).rules("add", { required: true });
});
form.validate();
return form.valid();
}
我想要放弃.net必填字段验证器来完成这一部分,但我想,如果可能的话,坚持使用单一的解决方案。特别是因为这感觉所以接近工作。
想法?救命?谢谢!
答案 0 :(得分:0)
您的jQuery .each()
方法构造不正确。
您希望在迭代中定位整个对象,而不是键/值对。因此,从函数参数中删除i, item
,并使用$(this)
作为目标选择器。
function IsRequiredValid() {
var $requiredgroup = $(".isrequired");
$requiredgroup.each(function() {
$(this).rules("add", { required: true });
});
// form.validate(); // remove this line -> 100% superfluous
return form.valid();
}
关于两个功能中的form.validate()
行:您无法在页面上多次调用.validate()
。它只是被称为一次来初始化表单上的插件。
随后调用它将无效。否则,我们不需要使用.rules()
方法,因为我们只要在需要更改规则时调用.validate()
。但是,情况肯定不是这样。
答案 1 :(得分:-1)
在必填字段中添加一个类,名为:“SubmitRequired” 实现以下两个功能:
function SaveClick(){
//ignore SubmitRequired on save (and any disabled fields)
$("form").validate({ ignore: ".SubmitRequired, [disabled]" });
if $("form").valid()
{
do something;
}
}
function SubmitClick(){
//ignore only disabled fields (if any))
$("form").validate({ ignore: "[disabled]" });
if $("form").valid()
{
do something;
}
}