jQuery禁用单个字段的规则validation

我正在使用MVC来创build在运行时生成的窗体。 为了validation,我正在尝试使用非常方便的jQueryvalidation库。 我有标签的cdata属性中每个字段的validationexpression式

<input type="text" name="xyz" id="xyz" class="defaultTextBox" cdata="{validate:{required:true, decimal:true, messages: {required:'Please enter an decimal value', decimal:'Please enter a valid decimal'}}}"> 

这工作很好。 现在我要求的另一个要求是,根据页面上的逻辑显示和隐藏一些字段,并且我需要禁用对隐藏字段的validation,以便它们不干扰表单提交。 只需要切换所需:真到假,回到真实就够了。 只有我不知道如何。

任何人有任何经验呢?

只需添加忽略规则并定义select器。 在这个例子中,validation将忽略具有class="ignore"所有元素

 $("#myform").validate({ ignore: ".ignore" }) 

如果您使用ASP.NET MVC Unobtrusive JQueryvalidation,则需要以这种方式设置设置。 这是因为Microsoft实际调用jQueryvalidation的方式。 这应该是安全的做一个ready方法。

编辑:复制粘贴之前,请参阅下面的科里的评论。 这是我的原始代码

  $("form").data("validator").settings.ignore = ".data-val-ignore, :hidden, :disabled"; 

然后,我只是将.data-val-ignore类应用于不validation的事情。

请注意,您可能需要添加:hidden其实是在jquery.validate.js定义的默认忽略行为。 我想添加:disabled

 $.extend($.validator, { defaults: { messages: {}, groups: {}, rules: {}, errorClass: "error", validClass: "valid", errorElement: "label", focusInvalid: true, errorContainer: $([]), errorLabelContainer: $([]), onsubmit: true, ignore: ":hidden", // default for ignore in jquery.validate.js ignoreTitle: false, onfocusin: function( element, event ) { this.lastActive = element; 

最后你可能想要devise它 – 在debugging时特别有用。

 .data-val-ignore { background: #eee; } 

在Gabe的回答之后,您还可以将忽略值设置为默认值,所以您不必在每个表单上设置它。

 $.validator.setDefaults({ignore: ".ignore"}); 

另请注意,ignore字段是jQuery not()函数中使用的jQueryselect器,因此可以使用任何有效的select器,而不仅仅是简单的类。

另请参阅http://docs.jquery.com/Plugins/Validation/validate#toptions了解可以设置的其他默认值的详细信息。;

我有更好的时间与$('.multiselect').rules('remove');

在我的情况下,不pipe是什么原因,将.cancel.data-val-ignore$.validator.setDefaults$('.multiselect')没有修复它。

我也试过了

 $('select[multiple][data-val]').removeAttr('data-val').removeAttr('data-val-number').addClass('data-val-ignore').validate({ ignore: "[multiple]" }); $.validator.setDefaults({ ignore: ":hidden,:disabled,.data-val-ignore" }); $('.multiselect').closest('form').data('validator').settings.ignore = ":hidden,:disabled,.data-val-ignore, .data-val-ignore *"; $('.multiselect').data('validator').settings.ignore = "[multiselect]" 

每个人…和他们的组合

我的jquery.validate.js

 /*! jQuery Validation Plugin - v1.11.0 - 2/4/2013 * https://github.com/jzaefferer/jquery-validation * Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */ 

jquery是

jQuery的JavaScript库v1.9.1 – date:2013-2-4