jquery验证器addmethod动态消息

时间:2012-05-24 20:14:51

标签: jquery jquery-validate

我有一个自定义验证方法,我正在使用jquery验证器。我试图获取动态生成的错误消息。

我用Google搜索了,我见过的答案显示在this stackoverflow post

但是,当我尝试自己实现它时,它不起作用。它只是忽略我更新的消息,只显示原始消息。

这是我的代码,位于jquery.ready()函数中。我做错了什么?

注意:“g $”是我们的jquery简写。

    var jsBlackoutDateMessage = "Tournaments cannot be scheduled on blackout dates.";
    var jsBlackoutDateMessageFunction = function () {
        return jsBlackoutDateMessage;
    };
    g$.validator.addMethod(
    "notBlackoutDate",
    function (value, element) {

        var notBlackoutDate = true;

        if (g$.inArray(value, jsBlackoutDates) != -1) {
            notBlackoutDate = false;
        }

        if (notBlackoutDate == false) {

            // year
            var year = new Date(g$.trim(g$('#txtDate').val())).getFullYear();

            var blackoutDatesForYear = jsBlackoutDates.filter(function (item) {
                return endsWith(item, year.toString());
            })[0];

            var blackoutDatesForYearMessage = [];
            blackoutDatesForYearMessage.push("Tournaments cannot be scheduled on blackout dates.");
            blackoutDatesForYearMessage.push("<ul>");

            g$.each(blackoutDatesForYear, function (key, value) {
                blackoutDatesForYearMessage.push("<li>");
                blackoutDatesForYearMessage.push(new Date(value).toLocaleDateString());
                blackoutDatesForYearMessage.push("</li>");
            });

            blackoutDatesForYearMessage.push("</ul>");

            jsBlackoutDateMessage = blackoutDatesForYearMessage.join("");
        }

        return this.optional(element) || notBlackoutDate;
    },
    jsBlackoutDateMessageFunction
);

1 个答案:

答案 0 :(得分:7)

我猜想有什么事情与过滤器或每个功能都没有正常运行。我尝试将代码简化为最简单的组件,并提出了这个问题(这在我的最终可行):

var message = "Original Message";
var messageFunc = function () { return message; };

$.validator.addMethod("messageTest", function (value, element) {
        var newMessage = [];

        newMessage.push("Original Message");
        newMessage.push(" - Plus new message");

        message = newMessage.join("");

        // We will always return false, so that
        // the message always shows
        return this.optional(element) || false;
    }, messageFunc);

$("#testId").rules("add", { messageTest: true });

在您的代码上,尝试替换:

jsBlackoutDateMessage = blackoutDatesForYearMessage.join("");

$("#someDivID").html( blackoutDatesForYearMessage.join("") );

其中someDivID是表单上可见的div。这样,您就可以使用FireBug来检查正在写下的实际HTML。它可能包含初始<ul></ul>标记,但由于它是空的,因此不可见。这有助于您确定代码的破坏位置。

另一个注意事项(对于那些你不能只调试调试器的语言来说尤其如此):通常最好先创建一个简单编码的裸骨版本。这使您可以开发迭代,并且可以更轻松地跟踪代码中断的位置。试试我帖子顶部的示例代码,看看你是否可以正常运行。