我使用jQuery验证方法,并设置了一些默认设置,如下面的
$.validator.setDefaults({
errorContainer : "#msgErrors ul",
errorLabelContainer: "#msgErrors",
wrapper: "li",
submitHandler: function(form) {
lockScreen();
if (typeof url !== 'undefined' && url != null) {
loadContentViaAjax("tr#idElement", url, $(form).formSerialize(), "html");
} else {
form.submit();
}
},
invalidHandler: function() {
var divsMessages = $(".fadeOutAndEmpty");
if (divsMessages.is(":animated")) {
divsMessages.stop().removeAttr("style").show();
}
}
});
对于这些默认设置工作,我必须通过在我拥有的每个表单上调用validate方法来初始化表单。为实现这一目标,我在页面完全加载后调用了
$("form").validate()
在每个页面加载的外部JS文件中。这样,我的应用程序中的所有表单都将激活验证方法,但我没有定义任何规则,并且再次调用validate方法传递实际规则将无法完成工作。
有没有办法定义必须执行的规则,即使已经调用了validate方法,这些规则也会被执行?
答案 0 :(得分:4)
引用OP:
“问题是,要使这段代码生效,我必须以我拥有的每种形式调用validate方法。”
这正是你应该做的事情,所以我不明白这是一个“问题”的原因或原因。
.validate()
方法就是初始化插件以便在特定表单上工作的方式。与初始化任何其他jQuery插件的方式没什么不同瞄准一个元素。
您可以在.valdiate()
内为一个目标表单设置选项,也可以在.setDefaults()
中设置适用于页面上所有表单的选项。
引用OP:
“我认为通过在JSP中调用validate方法,我会覆盖该方法,但事实并非如此。”
不确定“覆盖方法”的含义,但.validate()
只能在特定表单上调用一次。再次调用它将无能为力。
引用OP:
“这样做的问题是我无法放置任何验证规则。”
使用jQuery Validate插件,可以通过多种方式在表单上声明规则。
以下是两个非常简单的例子......
示例ONE - class
<强> HTML 强>:
<form id="myform">
<input type="text" name="field" class="required" />
</form>
<强>的jQuery 强>:
$(document).ready(function() {
// set defaults for all forms on this page
$.validator.setDefaults({
// your defaults
});
// initialize plugin on form with id #myform
$('#myform').validate();
});
DEMO:http://jsfiddle.net/pMp6d/
示例二 - 在.validate()
<强> HTML 强>:
<form id="myform">
<input type="text" name="field" />
</form>
<强>的jQuery 强>:
$(document).ready(function() {
// set defaults for all forms on this page
$.validator.setDefaults({
// your defaults
});
// initialize plugin on form with id #myform
$('#myform').validate({
rules: {
field: {
required: true
}
},
// other options specific to this form
});
});
DEMO:http://jsfiddle.net/pMp6d/1/
修改强>:
如果您需要在之后声明规则,那么您已经调用了.validate()
,那么您将使用.rules('add')
方法。
DEMO:http://jsfiddle.net/pMp6d/2/
$('input[name="fieldName"]').rules('add', {
required: true
});
或者,同时为所有input
个元素分配相同的规则......
$('input').each(function() {
$(this).rules('add', {
required: true
});
});
有关宣布规则的更多方法,请参阅此答案:https://stackoverflow.com/a/17792569/594235