我需要一个带有自定义错误消息的jQuery自定义验证器

时间:2012-12-03 10:49:11

标签: javascript jquery asp.net-mvc validation unobtrusive-validation

我正在使用VS 2010和MVC 3以及不引人注目的验证。我正在尝试创建一个自定义范围验证器,以包含输入值可接受但意外的警告。 (我有工作功能通过使用表单验证器的ignore选项提交带有wanings的值)

不引人注目的组成部分是:

// The adapter to support ASP.NET MVC unobtrusive validation // 
$.validator.unobtrusive.adapters.add('rangewithwarning', ['min', 'max', 'wmin', 'wmax', 'warning'],
function (options) {
    options.rules['rangewithwarning'] = {
        min: options.params.min,
        max: options.params.max,
        wmin: options.params.wmin,
        wmax: options.params.wmax,
        warning: options.params.warning
    };
    options.messages['rangewithwarning'] = options.message;
});

我已经广泛搜索了动态错误消息,这些消息似乎归结为三种方法,但这些方法都不允许我显示可选的错误消息。这些是:

  1. 返回错误消息

    // The validator function
    $.validator.addMethod('rangewithwarning', function (value, element, params) {
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    if (params.min <= intValue && intValue <= params.max) {
        //  outside warning but within allowed range - show warning
        return params.warning;
    }
    return $.validator.messages.rangewithwarning;
    

    });

  2. 使用showErrors

    // The validator function
    $.validator.addMethod('rangewithwarning', function (value, element, params) {
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var validator = this;
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    
    if (params.min <= intValue && intValue <= params.max) {
        //  outside warning but within allowed range - show warning
        var errors = new Object();
        errors[element.name] = params.warning;
        validator.showErrors(errors);            
    }
    
    return false;
    });
    
  3. messager函数

  4. 返回其他参数

    这些都没有奏效,虽然在第二个步骤中,可选消息被简要显示然后被覆盖。

    我显然遗漏了一些显而易见的东西,但看不出它是什么。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

找到一个使用标准范围属性的解决方案,然后使用我的新警告属性

(function ($) {

// The validator function
$.validator.addMethod('rangewarning', function (value, element, params) {
    var localElement = $(element);
    localElement.siblings("span").removeClass("warningOnlyDataOK")
    localElement.removeClass("warningOnlyDataOK")
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    //  set display and ignore class items here etc
    localElement.siblings("span").addClass("warningOnlyDataOK")
    localElement.addClass("warningOnlyDataOK")
    return false;
});

// The adapter to support ASP.NET MVC unobtrusive validation // 
$.validator.unobtrusive.adapters.add('rangewarning', ['wmin', 'wmax'],
function (options) {
    options.rules['rangewarning'] = {
        wmin: options.params.wmin,
        wmax: options.params.wmax
    };
    options.messages['rangewarning'] = options.message;
});

} (jQuery));

使用类warningOnlyDataOK来显示不同的样式错误消息并忽略保存时的验证。