jQuery在单个字段上禁用规则验证

时间:2010-05-17 22:44:29

标签: validation jquery-validate

我正在使用MVC创建在运行时生成的表单。为了验证,我正在尝试使用非常方便的jQuery验证库。我在标记

cdata 属性中有每个字段的验证表达式
<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'}}}">

这很好用。现在我还有一个要求是根据页面上的逻辑显示和隐藏某些字段,我需要在隐藏字段上禁用验证,这样它们就不会干扰表单提交。只需将所需的:true转换为false并返回true即可。只有我不知道如何。

任何人都有这方面的经验吗?

5 个答案:

答案 0 :(得分:81)

只需添加忽略规则并定义选择器即可。 在此示例中,验证将忽略具有class="ignore"

的所有元素
$("#myform").validate({
   ignore: ".ignore"
})

答案 1 :(得分:36)

如果您正在使用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;
}

答案 2 :(得分:6)

根据Gabe的回答,您还可以将忽略值设置为默认值,因此您无需在每个表单上进行设置。

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

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

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

答案 3 :(得分:3)

$('.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 Library v1.9.1 - Date:2013-2-4

答案 4 :(得分:0)

您可以通过执行以下操作从单个字段中删除规则:

 $("#field").rules('remove', 'required');

第二个参数是规则名称。我还删除了与此规则关联的属性,以避免造成任何混淆:

 $("#field").removeAttr('required');