如何使用 addClassRules 将消息添加到类

发布于 2024-09-10 11:55:12 字数 1071 浏览 3 评论 0原文

我正在使用 jQuery Validate 来验证包含大量重复数据行的页面。由于空间有限,每一行都有自己的验证摘要。

我使用 addClassRules 将验证规则应用到页面,但摘要中的默认错误消息过于笼统(例如“需要字段、需要字段等)。

示例:

jQuery.validator.addClassRules({
amount: {
    required: true,
    range: [0, 2000000]
},
comment: {
    maxlength: 51
},
owner: {
    notFirstOption: true
},
A: {
    required: function (element) {  
        return getParentElement($(element), "tr").find(".colB input.B").val().length > 0;
    },
    digits: true
}});

您可以为每个验证类中的规则应用自定义消息吗?理想情况下,我想要的是:

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000"
    },
    comment: {
        maxlength: "Comment may be a maximum of 51 characters"
    },
    owner: {
        notFirstOption: "Please select an owner"
    },
    A: {
        required: "A is required if B is entered",
        digits: "A must be numeric"
    }});

提前感谢您提供的任何帮助!

I'm using jQuery Validate to validate a page with a large number of repeated rows of data. Due to limited space, each row has it's own validation summary.

I use addClassRules to apply the validation rules to the page but the default error messages are too generic in the summary (e.g. "Field is required, Field is required etc).

Example:

jQuery.validator.addClassRules({
amount: {
    required: true,
    range: [0, 2000000]
},
comment: {
    maxlength: 51
},
owner: {
    notFirstOption: true
},
A: {
    required: function (element) {  
        return getParentElement($(element), "tr").find(".colB input.B").val().length > 0;
    },
    digits: true
}});

Can you apply custom messages for the rules in each validation class? Ideally I'm after something like:

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000"
    },
    comment: {
        maxlength: "Comment may be a maximum of 51 characters"
    },
    owner: {
        notFirstOption: "Please select an owner"
    },
    A: {
        required: "A is required if B is entered",
        digits: "A must be numeric"
    }});

Thanks in advance for any help you can offer!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

酷到爆炸 2024-09-17 11:55:12

在文档中,答案是为要调用的方法指定别名并添加自定义消息。

检查“重构规则”标题下的参考

// alias required to cRequired with new message
$.validator.addMethod("cRequired", $.validator.methods.required,
"Customer name required");
// alias minlength, too
$.validator.addMethod("cMinlength", $.validator.methods.minlength, 
// leverage parameter replacement for minlength, {0} gets replaced with 2
$.format("Customer name must have at least {0} characters"));
// combine them both, including the parameter for minlength
$.validator.addClassRules("customer", { cRequired: true, cMinlength: 2 });

In the documentation, the answer is to alias the method that you want to call and add the custom message.

Check the reference under the "Refactoring rules" heading:

// alias required to cRequired with new message
$.validator.addMethod("cRequired", $.validator.methods.required,
"Customer name required");
// alias minlength, too
$.validator.addMethod("cMinlength", $.validator.methods.minlength, 
// leverage parameter replacement for minlength, {0} gets replaced with 2
$.format("Customer name must have at least {0} characters"));
// combine them both, including the parameter for minlength
$.validator.addClassRules("customer", { cRequired: true, cMinlength: 2 });
拒绝两难 2024-09-17 11:55:12

这可以使用下面的代码来完成,

  $.validator.messages.accept = 'File must be JPG, GIF or PNG';

    $.validator.addClassRules("files", {            
      accept : "png|jpe?g|gif",  
      filesize : 2000000
    });

This can be done using below code,

  $.validator.messages.accept = 'File must be JPG, GIF or PNG';

    $.validator.addClassRules("files", {            
      accept : "png|jpe?g|gif",  
      filesize : 2000000
    });
小巷里的女流氓 2024-09-17 11:55:12

我想出了一个相当令人发指的解决方案,但希望能得到一些更干净、更多时间的解决方案...

无论如何,通过 jQuery 元数据分配消息,我可以为每个类自定义它们。

class="amount {validate:
                {messages:
                  {required:'Amount is required',
                   range: 'Amount must be between 0 and 2,000,000',
                   digits: 'Amount must be numeric'}
                }
              }"

...对于我的网格行中的每个字段等等。

我将考虑扩展“addClassRules”方法以接受消息参数,但目前这是可行的,所以它会这样做。

I've come up with a pretty heinous solution but hope for something a lot cleaner with a bit more time...

Anyway, by assigning the messages through jQuery metadata I'm able to customise them per class.

class="amount {validate:
                {messages:
                  {required:'Amount is required',
                   range: 'Amount must be between 0 and 2,000,000',
                   digits: 'Amount must be numeric'}
                }
              }"

...and so on for each of the fields in my grid rows.

I'll be looking at extending the 'addClassRules' method to accept a messages parameter but for now this works so it'll do.

落在眉间の轻吻 2024-09-17 11:55:12

由于每个人显然都对这个问题的回应感兴趣,因此这是我寻求答案的下一步!

我已在插件中添加了允许添加类消息的方法,并修改了默认消息处理程序以挑选出这些消息。

在“customMetaMessage”之前

customClassMessage: function (element, method) {
    //Get the elements class(es)
    var classes = $(element).attr("class").split(" ");

    //return any message associated with said class and method
    var m = $.validator.messages[classes[0]];

    return m && (m.constructor == String
        ? m
        : m[method]);
},

添加 修改“defaultMessage”以包含对上述方法的调用

defaultMessage: function (element, method) {
                return this.findDefined(
                this.customMessage(element.name, method),
                this.customMetaMessage(element, method),
                this.customClassMessage(element, method),
                // title is never undefined, so handle empty string as undefined
                !this.settings.ignoreTitle && element.title || undefined,
                $.validator.messages[method],
                "<strong>Warning: No message defined for " + element.name + "</strong>"
            );
            },

添加“addClassMessages”方法

        addClassMessages: function (className, messages) {
        if (className.constructor == String) {
            $.validator.messages[className] = messages != undefined ? messages : $.validator.messages[className];
        }
        else {
            $.extend(this.messages, className);
        }
    },

我还无法弄清楚如何在插件外部附加这些附加方法。至少我不必在“class”属性中声明错误消息。

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000",
        digits: "Amount must be numeric"
    }
});

Since everyone's obviously interested in the response to this one here's the next step in my pursuit of an answer!

I've added methods into the plugin that allow the addition of class messages and amended the default message handler to pick these out.

Added before 'customMetaMessage'

customClassMessage: function (element, method) {
    //Get the elements class(es)
    var classes = $(element).attr("class").split(" ");

    //return any message associated with said class and method
    var m = $.validator.messages[classes[0]];

    return m && (m.constructor == String
        ? m
        : m[method]);
},

Amended 'defaultMessage' to include a call to the above method

defaultMessage: function (element, method) {
                return this.findDefined(
                this.customMessage(element.name, method),
                this.customMetaMessage(element, method),
                this.customClassMessage(element, method),
                // title is never undefined, so handle empty string as undefined
                !this.settings.ignoreTitle && element.title || undefined,
                $.validator.messages[method],
                "<strong>Warning: No message defined for " + element.name + "</strong>"
            );
            },

Added an 'addClassMessages' method

        addClassMessages: function (className, messages) {
        if (className.constructor == String) {
            $.validator.messages[className] = messages != undefined ? messages : $.validator.messages[className];
        }
        else {
            $.extend(this.messages, className);
        }
    },

I haven't been able to work out how to attach these additional methods outside of the plugin as yet. At least I don't have to declare error messages in the 'class' attribute though.

jQuery.validator.addClassMessages({
    amount: {
        required: "Amount is required",
        range: "Amount must be between 0 and 2,000,000",
        digits: "Amount must be numeric"
    }
});
浅浅 2024-09-17 11:55:12

data-msg-required="Error message here" 与您想要进行验证的元素结合使用

<select name="account1" data-msg-required="Please select an account">
<option value="">--Select Account--</option>
<optgroup label="100-Assets">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
</optgroup>

Use data-msg-required="Error message here" with the element you like to do validation

<select name="account1" data-msg-required="Please select an account">
<option value="">--Select Account--</option>
<optgroup label="100-Assets">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
</optgroup>

很糊涂小朋友 2024-09-17 11:55:12

建议的答案需要编写自定义方法或常见错误消息,有时不容易自定义。下面的一个对我有用,在github问题跟踪器中提到:

$.validator.addClassRules = function (className, rules) {

    if (className.constructor === String) {
        var obj = {};
        obj[className] = rules;
        className = obj;
    }

    $.each(className, function (n, r) {
        $("." + n).each(function (i, e) {
            var self = $(e)
            self.rules('add', r);
        });
    });

}

<用法:

$.validator.addClassRules({
    'firstname': {
        required: true,
        messages: {
            required: "First name is required"
        }
    }
});

The suggested answers requires to write custom method or common error messages, which sometimes not easily customised. Below one works for me which was mentioned in github issue tracker:

$.validator.addClassRules = function (className, rules) {

    if (className.constructor === String) {
        var obj = {};
        obj[className] = rules;
        className = obj;
    }

    $.each(className, function (n, r) {
        $("." + n).each(function (i, e) {
            var self = $(e)
            self.rules('add', r);
        });
    });

}

Usage:

$.validator.addClassRules({
    'firstname': {
        required: true,
        messages: {
            required: "First name is required"
        }
    }
});
眼中杀气 2024-09-17 11:55:12

试试这个:

jQuery.validator.addClassRules({
    amount: {
        required: true,
        range: [0, 2000000],
        messages: {required: "Required field!", range: "Invalid range!"}
    },
    comment: {
        maxlength: 51,
        messages: {maxlength: "Max 51 characters!"}
    }
})

我想这就是你正在寻找的,对吗?

Try this:

jQuery.validator.addClassRules({
    amount: {
        required: true,
        range: [0, 2000000],
        messages: {required: "Required field!", range: "Invalid range!"}
    },
    comment: {
        maxlength: 51,
        messages: {maxlength: "Max 51 characters!"}
    }
})

I think that is what you are looking for, correct?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文