首页 文章

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

提问于
浏览
47

我正在使用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即可 . 只有我不知道怎么做 .

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

4 回答

  • 80

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

    $("#myform").validate({
       ignore: ".ignore"
    })
    
  • 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;
    }
    
  • 3

    根据Gabe的回答,您还可以将忽略值设置为默认值,因此您不必在每个表单上设置它 .

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

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

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

  • 6

    $('.multiselect').rules('remove'); 我度过了更好的时光

    在我的情况下,无论出于什么原因, $.validator.setDefaults.data-val-ignore 都没有修复它 .

    我也试过了

    $('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 - 日期:2013-2-4

相关问题