jQuery验证插件。将新规则添加到现有规则

jQuery验证插件。将新规则添加到现有规则,jquery,jquery-validate,Jquery,Jquery Validate,我有一个使用jQuery验证的项目。 这是我的密码: <script type="text/javascript" src="Scripts/jquery-1.5.1.js"></script> <script type="text/javascript" src="Scripts/jquery.validate.js"></script> <form action="/" id="MyForm" onsubmit="greeting()"&

我有一个使用jQuery验证的项目。 这是我的密码:

<script type="text/javascript" src="Scripts/jquery-1.5.1.js"></script>
<script type="text/javascript" src="Scripts/jquery.validate.js"></script>
<form action="/" id="MyForm" onsubmit="greeting()">
    <input type="checkbox" value="val1"  name="dner" />
    <input type="submit" value="Submit" />
</form>
<script type="text/javascript">
function greeting() {
    return $("#MyForm").valid();
}
$(document).ready(function () {
    $("#MyForm").validate({ onsubmit: true }); //If comment this code line, it work!!!
    $.validator.addMethod("MyFunction", function (value, element) {
        if ($("input:checked").length > 0) { return true } else { alert("Пустое поле"); return false; }
    },
    "");
    $("#MyForm").rules("add", { dner:{ MyFunction :true}});
});
</script>

函数问候语(){
返回$(“#MyForm”).valid();
}
$(文档).ready(函数(){
$(“#MyForm”).validate({onsubmit:true});//如果对这一代码行进行注释,它就会工作!!!
$.validator.addMethod(“MyFunction”,函数(值,元素){
if($((“输入:已检查”).length>0{return true}else{alert(“ППбббПбб”);return false;}
},
"");
$(“#MyForm”).rules(“add”,{dner:{MyFunction:true});
});

当我注释一行代码时,它就工作了。这是非常重要的,因为在我的项目中,我有一套新的验证规则,我不能重做它。如何向现有规则添加新规则?

您的代码:

//If comment this code line, it work!!!
$("#MyForm").validate({ onsubmit: true }); 
如果你注释掉整行,你将删除插件的初始化方法

这是一个没有意义的问题,因为您的代码在这两种情况下都不起作用。看到或看到

您必须纠正以下问题:


1)
onsubmit:true
已经是默认的行为,因此通过将其设置为
true
,可以中断插件。如果您希望在单击
submit
按钮时进行验证,只需将此选项忽略即可

:

onsubmit(默认值:true):
在提交时验证表单。设置为
false
仅使用其他事件进行验证。 设置为函数以自行决定何时运行验证布尔值
true
不是有效值


2) 您的代码:
$(“#MyForm”)。规则(“添加”…

您不应该将
.rules()
方法附加到
表单
。您仅将其附加到
字段
元素

$('input[name="dner"]').rules("add", {
    MyFunction: true
});

要将此方法同时应用于多个字段,请使用jQuery
.each()

$('input[type="checkbox"]').each(function() {
    $(this).rules("add", {
        MyFunction: true
    });
});

3) 您不需要内联的
submit
处理程序:
onsubmit=“greeting()”
。使用jQuery时,完全不需要内联JavaScript。此外,
submit
处理程序会干扰插件内置的
submit
处理程序。如果使用此插件时需要在
submit
事件上执行某些操作,请使用
submitHandler
回调函数

submitHandler: function(form) {
    // fire this code when a valid form is submitted
    return false;  // prevent default form action, e.g. when using ajax()
}
如果需要在表单无效时触发代码,请使用
invalidHandler
回调

invalidHandler: function(event, validator) {
    // fire this code when an invalid form is submitted
}
有关示例,请参见


4) 您的自定义方法可以压缩

$.validator.addMethod("MyFunction", function (value, element) {
   return ($("input:checked").length > 0) 
}, "Пустое поле");
如果您更愿意使用
警报()
而不是
标签
消息,可以将其放回原处。尽管我不建议在任何现代设计中使用
alert()



应用所有更改的演示

您建议的$('input[name=“dner”]')。规则(“add”,{MyFunction:true});我可以实现规则功能来不输入字段吗?因为我有几个复选框,我想选中这是一组复选框。@higgs.boson,复选框是一个输入字段。请参阅我编辑的答案,其中我展示了如何一次对多个元素使用
.rules('add')
。我想检查复选框组中是否至少选择了一项。我该怎么做?@higgs.boson,你从来没有在你的OP中提到过这方面的任何事情。但是,你可以包括
additional methods.js
文件,并使用
require\u from\u group
方法。指令嵌入在该文件的代码注释中。看到这个答案:我的项目非常大,我发布了唯一重要的时刻。是否有简单的方法可以轻松验证几个字段?无论如何,非常感谢!!!!!