使用类而不是名称值的jQueryvalidation

我想使用jQueryvalidation插件validation表单,但是我无法使用html中的“name”值,因为这是服务器应用程序也使用的字段。 具体来说,我需要限制从一个组中选中的checkbox的数量。 (最大值为3.)所有我见过的例子,使用每个元素的name属性。 我想要做的就是使用这个类,然后为此声明一个规则。

HTML

这工作:

<input class="checkBox" type="checkbox" id="i0000zxthy" name="salutation" value="1" /> 

这不起作用,但是我正在瞄准的是:

 <input class="checkBox" type="checkbox" id="i0000zxthy" name="i0000zxthy" value="1" /> 

JavaScript的:

 var validator = $(".formToValidate").validate({ rules:{ "salutation":{ required:true, }, "checkBox":{ required:true, minlength:3 } } }); 

是否有可能做到这一点 – 是否有一种方法,在规则选项中定位类而不是名称? 或者我必须添加一个自定义的方法?

干杯,马特

您可以使用.rules("add", options)基于该select器的规则,只需从您的validation选项中移除您想要的类的任何规则,然后调用$(".formToValidate").validate({... }); , 做这个:

 $(".checkBox").rules("add", { required:true, minlength:3 }); 

另一种方法是使用addClassRules 。 这是特定的类,而select使用select器和.rules更通用的方式。

打电话之前

 $(form).validate() 

像这样使用:

 jQuery.validator.addClassRules('myClassName', { required: true /*, other rules */ }); 

参考: http : //docs.jquery.com/Plugins/Validation/Validator/addClassRules#namerules

我比较喜欢这种语法。

我知道这是一个古老的问题。 但我最近也需要相同的,我从这个博客的另一个答案从stackoverflow +这个问题。 博客中的答案更直接,因为它特别专注于这种validation。 这是如何做到这一点。

 $.validator.addClassRules("price", { required: true, minlength: 2 }); 

这个方法不要求你在这个调用上面有validate方法。

希望这将有助于未来的人。 来源于此 。

这里是使用jQuery的解决scheme:

  $().ready(function () { $(".formToValidate").validate(); $(".checkBox").each(function (item) { $(this).rules("add", { required: true, minlength:3 }); }); }); 

这是我的解决scheme(不需要jQuery …只是JavaScript):

 function argsToArray(args) { var r = []; for (var i = 0; i < args.length; i++) r.push(args[i]); return r; } function bind() { var initArgs = argsToArray(arguments); var fx = initArgs.shift(); var tObj = initArgs.shift(); var args = initArgs; return function() { return fx.apply(tObj, args.concat(argsToArray(arguments))); }; } var salutation = argsToArray(document.getElementsByClassName('salutation')); salutation.forEach(function(checkbox) { checkbox.addEventListener('change', bind(function(checkbox, salutation) { var numChecked = salutation.filter(function(checkbox) { return checkbox.checked; }).length; if (numChecked >= 4) checkbox.checked = false; }, null, checkbox, salutation), false); }); 

把它放在<body>末尾的脚本块中,这个片段会发挥它的魔力,将最多检查的checkbox的数量限制为三个(或者你指定的任何数字)。

在这里,我甚至会给你一个testing页面(粘贴到一个文件,并尝试它):

 <!DOCTYPE html><html><body> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <input type="checkbox" class="salutation"> <script> function argsToArray(args) { var r = []; for (var i = 0; i < args.length; i++) r.push(args[i]); return r; } function bind() { var initArgs = argsToArray(arguments); var fx = initArgs.shift(); var tObj = initArgs.shift(); var args = initArgs; return function() { return fx.apply(tObj, args.concat(argsToArray(arguments))); }; } var salutation = argsToArray(document.getElementsByClassName('salutation')); salutation.forEach(function(checkbox) { checkbox.addEventListener('change', bind(function(checkbox, salutation) { var numChecked = salutation.filter(function(checkbox) { return checkbox.checked; }).length; if (numChecked >= 3) checkbox.checked = false; }, null, checkbox, salutation), false); }); </script></body></html> 

因为对我来说,一些元素是在页面加载时创build的,有些是由用户dynamic添加的; 我用这个来确保一切都保持干爽。

在提交时,find所有与类x,删除类x,添加规则x。

 $('#form').on('submit', function(e) { $('.alphanumeric_dash').each(function() { var $this = $(this); $this.removeClass('alphanumeric_dash'); $(this).rules('add', { alphanumeric_dash: true }); }); }); 

如果你想添加自定义方法,你可以做到这一点

(在这种情况下,至less选中一个checkbox)

 <input class="checkBox" type="checkbox" id="i0000zxthy" name="i0000zxthy" value="1" onclick="test($(this))"/> 

在Javascript中

 var tags = 0; $(document).ready(function() { $.validator.addMethod('arrayminimo', function(value) { return tags > 0 }, 'Selezionare almeno un Opzione'); $.validator.addClassRules('check_secondario', { arrayminimo: true, }); validaFormRichiesta(); }); function validaFormRichiesta() { $("#form").validate({ ...... }); } function test(n) { if (n.prop("checked")) { tags++; } else { tags--; } }