/**
* 表单验证模块
* 重写浏览器默认的表单验证提示信息
* 将所有验证提示统一为英文
*/
;(function () {
'use strict'
// 获取HTMLInputElement原型上的validationMessage属性的原始getter方法
const originalValidationMessage = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'validationMessage').get
// 重写validationMessage属性的getter方法
Object.defineProperty(HTMLInputElement.prototype, 'validationMessage', {
get() {
// 获取当前输入框的验证状态对象
const validity = this.validity
// 处理必填字段为空的情况
if (validity.valueMissing) {
return 'This field is required'
}
// 处理输入类型不匹配的情况(如email格式错误)
if (validity.typeMismatch) {
switch (this.type) {
case 'email':
return 'Please enter a valid email address'
case 'url':
return 'Please enter a valid URL'
case 'tel':
return 'Please enter a valid phone number'
default:
return 'Please enter a valid value'
}
}
// 处理输入文本长度小于最小长度的情况
if (validity.tooShort) {
return `Please lengthen this text to ${this.minLength} characters or more (currently ${this.value.length} characters)`
}
// 处理输入文本长度大于最大长度的情况
if (validity.tooLong) {
return `Please shorten this text to ${this.maxLength} characters or less (currently ${this.value.length} characters)`
}
// 处理输入值小于最小值的情况
if (validity.rangeUnderflow) {
return `Please enter a value greater than or equal to ${this.min}`
}
// 处理输入值大于最大值的情况
if (validity.rangeOverflow) {
return `Please enter a value less than or equal to ${this.max}`
}
// 处理输入值不符合step步进值的情况
if (validity.stepMismatch) {
return `Please enter a valid value. The closest valid values are ${this.min} and ${this.max}`
}
// 处理输入值不匹配pattern正则表达式的情况
if (validity.patternMismatch) {
return this.title || 'Please match the requested format'
}
// 处理输入值格式错误的情况(如数字框输入了字母)
if (validity.badInput) {
switch (this.type) {
case 'number':
return 'Please enter a number'
case 'date':
return 'Please enter a valid date'
case 'time':
return 'Please enter a valid time'
case 'datetime-local':
return 'Please enter a valid date and time'
default:
return 'Please enter a valid value'
}
}
// 如果没有匹配到以上任何验证错误,则返回原始的验证消息
return originalValidationMessage.call(this)
},
})
})()
参与讨论
(Participate in the discussion)
参与讨论