我正在尝试更改默认错误消息"setCustomValidity" 抛出的电子邮件无效.
我无法访问源代码。我的假设是,源以某种方式调用setCustomValidity;仅仅是因为错误消息的外观。这是源元素:
<input type="email" value="" name="customer[email]" id="email" class="large" size="30">
I只能使用外部JavaScript/css文件注入任何更改.
我可以想出两种解决方案。
解决方案1: --我正在尝试使用JS注入内联元素,这将导致类似的结果。
<input type="email" value="" name="customer[email]" class="large" size="30" oninvalid="this.setCustomValidity('Please Enter valid email')" oninput="setCustomValidity('')">
我对JS很陌生,很难理解如何在外部JS文件中实现HTML。
解决方案2:调用error_message.js
中的like和setCustomValidity DOM方法,如下所示:
function emailValidity(){
var myInput = document.getElementByName("customer[email]");
myInput.oninvalid = function() {
(errorMessage)
};
function errorMessage(){
myInput.setCustomValidity("hey! the email isn't right");
}
}
但是这个文件即使在包含之后也无法覆盖默认消息!
任何帮助都是非常感谢的。提前谢谢你。
发布于 2021-01-09 01:53:09
此外,您必须在同一个元素上调用reportValidity方法,否则不会发生任何事情。
HTMLObjectElement.setCustomValidity
function validate(input) {
var validityState_object = input.validity;
console.log(validityState_object)
if (validityState_object.typeMismatch) {
input.setCustomValidity('Thats not an email!');
input.reportValidity();
} else {
input.setCustomValidity('');
input.reportValidity();
}
}
document.querySelector('#email').addEventListener('blur', e =>
validate(e.target)
)
<input type="email" value="" id="email">
发布于 2021-01-09 01:49:00
只需以相同的方式设置input
和invalid
事件侦听器即可。
const input = document.querySelector('input');
input.oninput = () => input.setCustomValidity('');
input.oninvalid = () => input.setCustomValidity('Please Enter valid email');
<form>
<input type="email" value="" name="customer[email]" class="large" size="30">
</form>
发布于 2021-01-09 01:55:50
您的代码不起作用,因为它不是在表单中。表单需要一个submit按钮来检查输入,并在必要时显示错误消息,所以我添加了这个按钮。
另外,当它应该是getElementByName
的时候,就有了getElementsByName
,后面的[0]
索引可以选择这个元素。
此外,每次用户尝试提交时,您都试图设置有效性,而用户只需要设置一次。
试试这个:
var myInput = document.getElementsByName("customer[email]")[0];
myInput.oninvalid = function() {
myInput.setCustomValidity("Hey! the email isn't right")
};
<form>
<input type="email" name="customer[email]" id="email" class="large" size="30">
<input type="submit" onsubmit="emailValidity()">
</form>
https://stackoverflow.com/questions/65638507
复制相似问题