如何覆盖一个表单的成功行为?

时间:2017-10-04 14:38:43

标签: jquery asp.net-mvc twitter-bootstrap-3 jquery-validate unobtrusive-validation

我们正在Asp.Net MVC上使用JQuery ValidationBootstrapjquery.validate.unobtrusive合作,在表单中显示成功和错误状态。这或多或少是默认配置:

jQuery.validator.setDefaults({
        ignore: "",
        validClass: "has-success",
        errorClass: "has-error",
        highlight: function(element, errorClass, validClass) {           
                $(element).addClass(errorClass).removeClass(validClass);
                $(element).closest('.form-group').removeClass(validClass).addClass(errorClass);                
            }
        },
        unhighlight: function(element, errorClass, validClass) {            
                $(element).removeClass(errorClass).addClass(validClass);
                $(element).closest('.form-group').removeClass(errorClass).addClass(validClass);
            }
        }
    });

在页面上为特定表单覆盖此内容的正确方法是什么?我不想完全覆盖默认值。

这是我想要在一个页面中只对一个表单执行的更改(用户请求了不同的行为)。形式没有按' t有验证,所以它绝不会显示/使用错误的风格,但当用户选择上的字段的值,则"成功"风格无论如何踢,我们也不想表现出来。

覆盖页面上特定表单的突出显示和解除突出行为的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

正确的方法是:

  • .setDefaults()用于设置适用于所有表单的选项。

  • .validate()用于设置仅适用于某个特定表单的选项。 .validate()用于初始化表单上的插件,并在所有情况下以某种方式被调用。

如果您在不显眼的验证插件中使用ASP,那么除了删除Unobtrusive插件之外,您没有任何其他解决方案。由于Unobtrusive自动构造.validate()方法,因此无法再次调用它,因为Validate插件不允许多次进行此初始化。如果您尝试在使用Unobtrusive时自己致电.validate(),则会忽略您的.validate()来电。一个典型的解决方法是使用.setDefaults()设置自定义选项,但是,正如您已经了解的那样,这始终适用于页面上的所有表单。

答案 1 :(得分:0)

感谢@Sparky帮助我更好地理解这个问题!

正如他在大多数情况下所说的那样,如果您有jquery.validatejquery.validate.unobtrusive并且您需要覆盖页面中只有一个表单的默认设置,则您必须:

  • 覆盖所有表格的
  • 或删除jquery.validate.unobtrusive并单独配置每个表单。

但是,following this post我意识到你可以使用表单的验证对象(一旦创建)覆盖某些内容。

链接中的示例可能不起作用,因为当他尝试覆盖事件时,原始的事件已经附加了。

但在的情况下,可以通过更改 validClass 设置来解决问题。

$(document).ready(function () {
    // get the validator instance
    var validate = $(".my-form").validate();

    // overwrite validClass
    validate.settings.validClass = "";
}