MVC3 jquery.validate.unobtrusive 覆盖选项而不编辑源?

Posted

技术标签:

【中文标题】MVC3 jquery.validate.unobtrusive 覆盖选项而不编辑源?【英文标题】:MVC3 jquery.validate.unobtrusive override options without editing source? 【发布时间】:2012-04-13 15:43:36 【问题描述】:

只是想知道在不编辑源 js 文件的情况下使用 mvc3 jquery.validate.unobtrusive 时是否有办法覆盖高亮和取消高亮选项...

我已经试过了:

var elementToValidate = $(element);
        var form = $(element.form);
        if (form.length) 
            //elementToValidate.valid();
            form.validate(
                highlight: function (element, errorClass, validClass) 
                    $(element).removeClass(errorClass);
                    $(element).closest('td').addClass('alert-error error');
                , unhighlight: function (element, errorClass, validClass) 
                    $(element).removeClass(errorClass);
                    $(element).closest('td').addClass('alert-error error');
                
            );
        

但突出显示和取消突出显示不会被覆盖,除非我从脚本中删除不显眼的库..

如果我编辑 jquery.validate.unobtrusive.js 的源代码,它似乎工作得很好:

function validationInfo(form) 
        var $form = $(form),
            result = $form.data(data_validation);

        if (!result) 
            result = 
                options:   // options structure passed to jQuery Validate's validate() method
                    errorClass: "input-validation-error",
                    errorElement: "span",
                    errorPlacement: $.proxy(onError, form),
                    invalidHandler: $.proxy(onErrors, form),
                    messages: ,
                    rules: ,
                    success: $.proxy(onSuccess, form),
                    highlight: function (element, errorClass, validClass) 
                        $(element).removeClass(errorClass);
                        $(element).closest('td').addClass('alert-error error');
                    , unhighlight: function (element, errorClass, validClass) 
                        $(element).removeClass(errorClass);
                        $(element).closest('td').addClass('alert-error error');
                    
                ,
                attachValidation: function () 
                    $form.validate(this.options);
                ,
                validate: function ()   // a validation function that is called by unobtrusive Ajax
                    $form.validate();
                    return $form.valid();
                
            ;
            $form.data(data_validation, result);
        

        return result;
    

只是想知道是否有人想出了一种无需修改源即可覆盖选项的方法..

干杯

【问题讨论】:

【参考方案1】:

您可以更改 jquery 验证器的默认值:

$.validator.defaults.highlight = function (element, errorClass, validClass) 
    $(element).removeClass(errorClass);
    $(element).closest('td').addClass('alert-error error');
;
$.validator.defaults.unhighlight = function (element, errorClass, validClass) 
    $(element).removeClass(errorClass);
    $(element).closest('td').addClass('alert-error error');
;

在执行onload 事件之前执行这个(即不要在$(document).ready() 中调用这个,而是直接调用)。

【讨论】:

以上是关于MVC3 jquery.validate.unobtrusive 覆盖选项而不编辑源?的主要内容,如果未能解决你的问题,请参考以下文章

MVC3 输入相关验证

MVC3.0 中Razor 学习

使用 Lightspeed 进行 MVC3 验证

MVC3:在“仅代码”中设置默认值

mvc3学习之--安装

MVC3 应用架构——如何存储数据