jQuery 需要覆盖的验证消息没有按预期工作
jQuery Validation message required overwrite does not work as expected
像 here and official 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!",
}
});
有效。它真的覆盖了通常的 "Field Email is required"。但是现在我无法设置任何其他消息。所以这没有用!
那么现在如何覆盖所需的文本?
我正在使用 Drupal 7.51 和 客户端验证 7.x-1.42 和 jQuery 1.10.2.
其他消息无论如何都写得正确
因此,当我收到电子邮件而不是要求的电子邮件时,它会正确地 owerwrites。所以这是我假设的必需信息?您对此有何看法:
$('#my-form').validate({
rules: {
mail: "email",
},
messages: {
mail: {
email: "Invalid email",
},
}
});
也可以全局设置消息,除非是必需的
适用于电子邮件,但不是必需的:
jQuery.extend(jQuery.validator.messages, {
required: "required...",
email: "email...",
});
可能的解决方法(但没有解决方案)
- jQuery Validate custom messages
提示:我遇到了其他表单无法正常工作的问题。但这只是在 PHP 中设置 #required
属性 的问题。将其设置为所有不同的用户注册表单后,它们也能正常工作。
您可以随时执行以下操作:
(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 事件。
只需通过字段id更改消息
(function(Drupal, $) {
Drupal.behaviors.mymodBehavior = {
attach: function(){
jQuery('#field_id').rules("add", {
messages: {
required: "Custom validation message"
}
});
}
}
}
)(Drupal,jQuery);
像 here and official 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!",
}
});
有效。它真的覆盖了通常的 "Field Email is required"。但是现在我无法设置任何其他消息。所以这没有用!
那么现在如何覆盖所需的文本?
我正在使用 Drupal 7.51 和 客户端验证 7.x-1.42 和 jQuery 1.10.2.
其他消息无论如何都写得正确
因此,当我收到电子邮件而不是要求的电子邮件时,它会正确地 owerwrites。所以这是我假设的必需信息?您对此有何看法:
$('#my-form').validate({
rules: {
mail: "email",
},
messages: {
mail: {
email: "Invalid email",
},
}
});
也可以全局设置消息,除非是必需的
适用于电子邮件,但不是必需的:
jQuery.extend(jQuery.validator.messages, {
required: "required...",
email: "email...",
});
可能的解决方法(但没有解决方案)
- jQuery Validate custom messages
提示:我遇到了其他表单无法正常工作的问题。但这只是在 PHP 中设置 #required
属性 的问题。将其设置为所有不同的用户注册表单后,它们也能正常工作。
您可以随时执行以下操作:
(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 事件。
只需通过字段id更改消息
(function(Drupal, $) {
Drupal.behaviors.mymodBehavior = {
attach: function(){
jQuery('#field_id').rules("add", {
messages: {
required: "Custom validation message"
}
});
}
}
}
)(Drupal,jQuery);