jQuery禁用单个字段的规则验证

问题描述:

我正在使用MVC创建在运行时生成的表单。对于验证,我正在尝试使用非常方便的jQuery验证库。我有每个字段的CDATA验证表达标签jQuery禁用单个字段的规则验证

<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'}}}"> 

这精美的作品的属性。现在我需要的另一个要求是,根据页面上的逻辑显示和隐藏一些字段,并且我需要禁用对隐藏字段的验证,以免它们干扰表单提交。只需切换所需的信息:真实到错误并回到真实就足够了。只有我不知道如何。

任何人有任何经验吗?

只需添加忽略规则并定义选择器即可。 在这个例子中,验证会忽略有class="ignore"

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

酷..它的工作 – shake 2010-05-17 22:59:01

+33

警告! 'defaults'配置中'jquery.validate.js'的默认值是'ignore:“:hidden”'所以我建议把'ignore:'.ignore,:hidden“'或其他隐藏的字段用于验证忽然会给你的错误 – 2013-02-22 06:52:57

+1

没关系,我在jquery.validate.js – Nilzor 2014-02-03 09:01:41

上Gabe的答案之后的所有元素,你也可以设置忽略值作为默认的,所以你不必设置每个窗体上。

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

还要注意,忽略场是在jQuery的not()功能,使任何有效的选择都可以使用,而不仅仅是简单的类使用jQuery选择。

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

如果您使用ASP.NET MVC Unobtrusive JQuery验证,您需要以这种方式设置设置。这是因为Microsoft实际调用jQuery验证的方式。在ready方法中这应该是安全的。

编辑:请复制粘贴前请参阅Cory的评论。这是我的原代码

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

然后我申请.data-val-ignore类的东西不验证。

请注意,您可能需要添加: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; 

最后你可能想要设计它 - 在调试时特别有用。

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

之前执行它感谢MVC的例子;正是我所期待的。 – 2013-03-07 22:31:27

+7

访问设置的方式似乎已经改变(至少在我的项目中),现在是:$(“form”).validate()。settings.ignore - 以防万一这是其他人的解决方案! – 2013-05-15 01:48:13

+0

@CoryW。我真的认为你应该把这个评论变成一个答案!为我节省了很多时间。没有其他解决方案为我工作 – Code 2017-01-19 11:24:57

我曾与$('.multiselect').rules('remove');

一个更好的时间在我的情况下,无论出于什么原因将.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的 - 日期:2013年2月4日