【问题标题】:jQuery Validation message required overwrite does not work as expected需要覆盖的 jQuery 验证消息无法按预期工作
【发布时间】:2016-10-13 14:25:49
【问题描述】:

有很多教程,例如 hereofficial jQuery Validate docs。但是他们不再工作来覆盖所需的消息。

所以这个不会覆盖所需的消息。但无论如何,那里的所有教程都说它应该以这种方式工作:

$('#my-form').validate({
        rules: {
          mail: "required",
        },
        messages: {
          mail: {
            required: "Give an email in!",
          },
        }
  });

如果我这样做:

$('#my-form').validate({
        rules: {
          mail: "required",
        },
        messages: {
          mail: "Give an email in!",
        }
      });

它有效。它确实覆盖了通常的“需要字段电子邮件”。但现在我无法设置任何其他消息。所以这没什么用!

那么现在如何覆盖所需的文本呢?

我将 Drupal 7.51Clientside Validation 7.x-1.42jQuery 1.10.2 一起使用。

其他消息无论如何都正确改写了

所以当我收到电子邮件而不是要求时,它会正确地覆盖它。所以这是我假设的所需信息?您对此有何看法:

   $('#my-form').validate({
            rules: {
              mail: "email",
            },
            messages: {
              mail: {
                email: "Invalid email",
          },
            }
   });

也可以全局设置消息,除非需要

适用于电子邮件,但不是必需的:

jQuery.extend(jQuery.validator.messages, {
  required: "required...",
  email: "email...",
});

可能的解决方法(但没有解决方案)

提示:我遇到了其他表单无法正常工作的问题。但这只是在 PHP 中设置 #required 属性的问题。将其设置为所有不同的用户注册表单后,它们也可以正常工作。

【问题讨论】:

    标签: jquery validation drupal-7


    【解决方案1】:

    您始终可以执行以下操作:

    (function(Drupal, $) {
      Drupal.behaviors.myModuleBehavior = {
        attach: function() {
          $(document).bind('clientsideValidationInitialized', function() {
            var validator = Drupal.myClientsideValidation.validators['my-form'];
            if (typeof validator.settings.messages.mail === 'undefined') {
              validator.settings.messages.mail = {};
            }
            validator.settings.messages.mail.required = 'My custom message for the "required" rule for the input with name "mail".';
          });
        }
      };
    })(Drupal, jQuery);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="http://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.js"></script>
    <form id="my-form">
      <input name="mail" type="mail" required="required" />
      <input type="submit" value="Submit" />
    </form>

    这应该可以正常工作。

    编辑:我更新了脚本以使用客户端验证 Drupal 模块。它在完成所有处理后触发 clientsideValidationInitialized 事件。

    【讨论】:

    • 好主意。但对我来说它不起作用。当我在设置所需的消息后查看验证器时。它仍然向我显示来自客户端验证模块的“不需要的”消息。我还需要做什么?或者只是在需要的东西上设置一个超时?老实说,这完全是一种奇怪的行为。
    • 确实setTimeout(function() { validator.settings.messages.mail.required = 'My custom message for the "required" rule for the input with name "mail".'; }, 100); 有效。所以不知何故,这是事件执行和时间的问题。这很糟糕。知道为什么我需要这个超时?
    • 在一个表单上工作。但是我实现了不同的注册表单。不知何故,mail.required 消息没有被覆盖。很奇怪。但我会寻找解决方案。因为 /user/register 上的注册表工作正常......给我一点时间:)
    • 好的,所以我知道我的问题是什么。我在上面编辑了我的帖子,以便更好地阅读。 :)
    • 好的,现在一切正常。非常感谢您的帮助。 :)
    【解决方案2】:

    只需通过字段 id 更改消息

    (function(Drupal, $) {
        Drupal.behaviors.mymodBehavior = {
          attach: function(){
            jQuery('#field_id').rules("add", {
                messages: {
                  required: "Custom validation message"
               }
              });
          }
        }
      }
      )(Drupal,jQuery);
    

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多