JQuery 验证 - 如何将标题属性设置为错误消息

发布于 2024-09-04 05:12:00 字数 740 浏览 2 评论 0原文

在 JQuery 验证中,错误的默认行为是创建一个标签,如下所示:

<label for="FirstName" generated="true" class="error">This field is required.</label>

是否可以更改它以便它将输出此标签(将标题属性设置为错误消息)?

<label for="FirstName" generated="true" class="error" title="This field is required.">This field is required.</label>

我尝试过突出显示方法,但标签尚未创建:

$("#form").validate({
    highlight: function (element, errorClass) {
        var label = $("label[for=" + element.id + "]");  // but label doesn't exist yet so this doesnt work
        if (label && label.length > 0) {  // label.length is always 0
            label.attr('title', label.text());
        }
    }
});

In JQuery validation the default behavior on an error is to create a label like so:

<label for="FirstName" generated="true" class="error">This field is required.</label>

Is it possible to change it so that it will output this instead (with a title attribute set to the error message)?

<label for="FirstName" generated="true" class="error" title="This field is required.">This field is required.</label>

I've tried the highlight method, but the label has not been created yet:

$("#form").validate({
    highlight: function (element, errorClass) {
        var label = $("label[for=" + element.id + "]");  // but label doesn't exist yet so this doesnt work
        if (label && label.length > 0) {  // label.length is always 0
            label.attr('title', label.text());
        }
    }
});

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

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

发布评论

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

评论(3

自此以后,行同陌路 2024-09-11 05:12:00

好吧,试试这个...

$("#form").validate({
    highlight: function (element, errorClass) {
        setTimeout(function() {
            var label = $("label[for=" + element.id + "]");
            if (label && label.length > 0) { 
                label.attr('title', label.text());
            }
        }, 10);     
    }
});

基本上我们只是将设置标题属性的部分延迟 10 毫秒,这样我们就可以确保首先创建标签元素。

希望这有帮助

ok try this...

$("#form").validate({
    highlight: function (element, errorClass) {
        setTimeout(function() {
            var label = $("label[for=" + element.id + "]");
            if (label && label.length > 0) { 
                label.attr('title', label.text());
            }
        }, 10);     
    }
});

basically we just delay the part where we set the title attribute for 10ms so we are sure that the label element is created first.

hope this helps

以酷 2024-09-11 05:12:00

试试这个。

var validator = $('#form1').validate({
        highlight: function (element, errorClass, message) {
            var errorMessage = validator.errorMap[element.name]
            $(element).attr('title', errorMessage);
        }
    });

无需黑客攻击

try this instead.

var validator = $('#form1').validate({
        highlight: function (element, errorClass, message) {
            var errorMessage = validator.errorMap[element.name]
            $(element).attr('title', errorMessage);
        }
    });

no hacks required

勿忘初心 2024-09-11 05:12:00

我有点晚了,但偶然发现了这个问题,另一个解决方案是使用 errorPlacement 回调。

editid:同时删除生成的属性,否则在重新应用消息时编辑字段后消息文本会刷新。

var validator = $('#form1').validate({
  errorPlacement: function(error, element) {
    element.attr('title', error.text());
    error.text('!');
    error.removeAttr('generated');
    error.appendTo(element.parent());
    return true;
  }
}

I'am a bit late, but stumbled upon this question, and another solution would be to use the errorPlacement callback.

editid: also remove the generated attribute, else the message text gets refreshed after editing the field when the message is re-applied.

var validator = $('#form1').validate({
  errorPlacement: function(error, element) {
    element.attr('title', error.text());
    error.text('!');
    error.removeAttr('generated');
    error.appendTo(element.parent());
    return true;
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文