jqueryvalidation插件规则有条件吗?
我正在使用Jqueryvalidation插件,我有一个带有“保存”,“提交”按钮的大表单。 我有两套按钮规则。
- 每当用户单击保存按钮时,只有有效规则的一组规则(必填字段电子邮件,密码)。
- 每当用户单击保存按钮时,只有有效规则的两组规则(所有必填字段)。
任何人都建议,如何发展这样?
Set1规则:
var rulesOne = { email : "required" .......}
Set2规则:
var rulesTwo = {city : "required" ..........} $("#form1").validate({ ignore : '*:not([name]),:hidden', rules : rules});
如果保存按钮
if(this.id == "personal_save"){ setOne rules test ? else // submit button (check all validations) { setTwo rules test ? }
谢谢Prasad
您无法使用此插件动态打开/关闭表单的任何/所有部分的validation。
但是,您可以使用.rules()
方法随时动态添加,删除或覆盖规则,从而为您提供类似的行为。
然后,您可以使用.valid()
方法来测试表单。
将它们放在专用的click
事件处理程序中。
$(document).ready(function() { // initialize the plugin $("#form1").validate({ ignore : '*:not([name]),:hidden' // no rules; rules are set dynamically below }); // Save Button $('#save_button').on('click', function() { // dynamically set the rules $('input[name="email"]').rules('add', { required: true, .... }); // remove all rules from the other fields $('input[name="city"]').rules('remove'); // force a test of the form $("#form1").valid(); }); // Submit Button $('#submit_button').on('click', function() { // dynamically set the rules $('input[name="city"]').rules('add', { required: true, .... }); // remove all rules from the other fields $('input[name="email"]').rules('remove'); // force a test of the form $("#form1").valid(); }); });
概念certificateDEMO: http : //jsfiddle.net/x6YWM/
如果你有很多字段,你可以通过在它们上设置适当的类来.ruleset1
它,如.ruleset1
和.ruleset2
。 然后,您可以使用.rules()
方法将它们作为一个组进行.rules()
。 请记住,如果选择器针对多个元素,则需要将它们包含在jQuery .each()
…
$('.ruleset1').each(function() { // target multiple elements $(this).rules('add', { // apply the rules to each required: true, .... }); });
我遇到了同样的问题,经过大量研究后我找到了解决方案。 它包括使用JQuery.extend替换validation器设置中的rules属性。 我创建了一个基于@Sparky的jsfiddle。 http://jsfiddle.net/rWsLy/
$('#save_button').on('click', function () { var settings = $("#form1").validate().settings; // Modify validation settings $.extend(settings, { rules: { field1: { required: true, }, }, }); // force a test of the form $("#form1").valid(); });
我更喜欢这种方式,因为规则的指定方式与validate方法相同。 我认为,以前的解决方案不会扩展。