我们正在Asp.Net MVC
上使用JQuery Validation
与Bootstrap
和jquery.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有验证,所以它绝不会显示/使用错误的风格,但当用户选择上的字段的值,则"成功"风格无论如何踢,我们也不想表现出来。
覆盖页面上特定表单的突出显示和解除突出行为的正确方法是什么?
答案 0 :(得分:3)
正确的方法是:
.setDefaults()
用于设置适用于所有表单的选项。
.validate()
用于设置仅适用于某个特定表单的选项。 .validate()
用于初始化表单上的插件,并在所有情况下以某种方式被调用。
如果您在不显眼的验证插件中使用ASP,那么除了删除Unobtrusive插件之外,您没有任何其他解决方案。由于Unobtrusive自动构造.validate()
方法,因此无法再次调用它,因为Validate插件不允许多次进行此初始化。如果您尝试在使用Unobtrusive时自己致电.validate()
,则会忽略您的.validate()
来电。一个典型的解决方法是使用.setDefaults()
设置自定义选项,但是,正如您已经了解的那样,这始终适用于页面上的所有表单。
答案 1 :(得分:0)
感谢@Sparky帮助我更好地理解这个问题!
正如他在大多数情况下所说的那样,如果您有jquery.validate
和jquery.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 = "";
}