如何获取通过setCustomValidity设置的HTML5自定义验证错误消息?
获取HTML5 Constraints API的自定义错误消息
这个问题我之前也碰到过,其实答案很简单——你要找的自定义错误消息并不在ValidityState对象里,而是存在输入元素自身的validationMessage属性中!
为什么ValidityState里找不到消息?
ValidityState本质是一个错误状态标识集合,它里面的所有字段(比如customError、valueMissing、typeMismatch等)都是布尔值,作用是告诉你当前输入元素触发了哪一类验证错误,并不负责存储具体的错误文本内容。当你看到customError为true时,只是在提示你:当前的验证错误是通过自定义规则触发的,具体消息要去元素本身的属性里找。
正确获取自定义错误消息的方法
直接访问输入元素的validationMessage属性即可,不管是系统默认的验证消息,还是你通过setCustomValidity()设置的自定义消息,都会存在这里。
举个完整的示例:
// 获取目标输入元素 const inputElement = document.getElementById('your-input-id'); // 设置自定义验证错误消息 inputElement.setCustomValidity('这是我自定义的错误提示内容'); // 验证元素状态(此时ValidityState.customError会是true) console.log(inputElement.validity.customError); // 输出: true // 获取自定义错误消息 console.log(inputElement.validationMessage); // 输出: "这是我自定义的错误提示内容"
额外注意事项
当你需要清除自定义错误,让元素恢复验证有效性时,一定要调用setCustomValidity('')(传入空字符串),否则customError会一直保持true,元素会持续处于验证无效状态:
// 清除自定义错误 inputElement.setCustomValidity(''); console.log(inputElement.validity.customError); // 输出: false console.log(inputElement.validationMessage); // 输出: ""
内容的提问来源于stack exchange,提问作者Łukasz W.




