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

我们正在研究Asp.Net MVC ,使用带有Bootstrap JQuery Validationjquery.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); } } }); 

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

这是我想要在一个页面中只对一个表单执行的更改(用户请求了不同的行为)。 表单没有validation器,因此它永远不会显示/使用错误样式,但是当用户在字段上选择一个值时,“成功”样式无论如何都会启动,我们也不想显示它。

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

正确的方法是:

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

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

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

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

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

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

但是, 在这篇文章之后,我意识到你可以使用表单的validation对象(一旦创建)覆盖某些内容。

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

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

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