检查浏览器是否具有内置HTML5表单验证?
如何检查浏览器是否具有内置HTML5表单验证功能?这样,我们就不需要在能够自己验证表单的浏览器上应用jQuery表单验证函数 [已解决] 根据ThinkingStiff的回答,以下是一种方法:检查浏览器是否具有内置HTML5表单验证?,html,validation,Html,Validation,如何检查浏览器是否具有内置HTML5表单验证功能?这样,我们就不需要在能够自己验证表单的浏览器上应用jQuery表单验证函数 [已解决] 根据ThinkingStiff的回答,以下是一种方法: if (typeof document.createElement("input").checkValidity == "function") { alert("Your browser has built-in form validation!"); } 您可以使用Modernizer jav
if (typeof document.createElement("input").checkValidity == "function") {
alert("Your browser has built-in form validation!");
}
您可以使用Modernizer javascript来实现这一点。你可以从这篇文章中得到帮助。您还可以利用Modernizer负载 modernizer.load()的基本语法是向其传递一个具有以下属性的对象:
- 测试:要检测的Modernizer属性
- 是:如果测试成功,要加载的脚本的位置。对多个脚本使用一个数组
- 否:测试失败时要加载的脚本的位置。对多个脚本使用一个数组
- 完成:加载外部脚本后立即运行的函数(可选)
现代化负荷({
测试:需要现代化输入,
否:“js/check_required.js”,
完成:函数(){
init();
}
});
来源:只需检查
checkValidity()
函数是否存在:
演示:
可以这样称呼:
if( hasFormValidation() ) {
//HTML5 Form Validation supported
};
怎么样
function hasFormValidation() {
return 'noValidate' in document.createElement('form');
}
来源:像Android one(4.4之前的版本)这样的导航器存在问题,它实现了
检查有效性(该功能实际上检查输入),但如果某些输入无效,浏览器不会向用户提供任何信息(并发送表单)
但是,您可以使用validationMessage
检查是否存在任何问题。此属性显示浏览器将向用户显示的错误消息。如果checkValidity()
为false,但不存在validationMessage
浏览器不具备完整的html5表单验证支持
我做了这个函数。它需要以下表单中的所有字段作为参数:
canValidateFields() {
var result = typeof document.createElement( 'input' ).checkValidity == 'function';
if (result) {
for (var i = 0; i < arguments.length; i++) {
var element = document.getElementById(arguments[i]);
if (!element.checkValidity() && (!element.validationMessage || element.validationMessage === null || element.validationMessage === '')) {
return false;
}
}
}
return result;
}
canValidateFields(){
var result=typeof document.createElement('input')。checkValidity=='function';
如果(结果){
for(var i=0;i
示例:以下测试不适用于Safari:
document.createElement('form')中的“noValidate”
及
typeof document.createElement('input')。checkValidity=='function'
当预期出现false
时,它们会报告true
,因为Safari不会报告无效字段
但是,该测试在以下情况下有效:
document.createElement('form')中的“reportValidity”
(未在IE或Android上测试)
编辑:
Safari会验证,但不会报告,这解释了对这些测试的响应。可以通过CSS:Invalid
伪类发现无效字段。这些测试的组合可用于在浏览器不支持验证的情况下进行验证,以及在浏览器不支持报告的情况下进行报告 多谢各位。这个方法看起来很简洁。我在本地服务器上测试了它,IE6/7/8/9似乎无法运行它。有解决办法吗?我知道了。这是因为IE6/7/8/9不能很好地处理textContent。Safari和一些移动webkit浏览器(包括3.0之前版本的默认Android浏览器)都实现了checkValidity方法。但是,当表单无效并允许提交表单时,浏览器绝对不会向用户提供反馈。如果浏览器支持约束验证api,这会使checkValidity方法在测试时不可靠。HTMLFormElement.prototype.checkValidity
是否是检查存在的更干净的方法?@ThinkingStiff对此不确定,但它是Dom spec 2[1]的一部分,因此在任何地方都可用。它是一个构造函数,所以总是有一个HTMLFormElement.prototype
可用。因此,checkValidity
将是未定义的
或函数。它类似于Foo=function(){};Foo.prototype.checkvaldy
,这在国际海事组织是安全的。1.尽管缺少内置验证,Safari 8.0.4仍然返回true。感谢您提供的信息:)这是截至2020年7月的最佳解决方案。
function hasFormValidation() {
return 'noValidate' in document.createElement('form');
}
canValidateFields() {
var result = typeof document.createElement( 'input' ).checkValidity == 'function';
if (result) {
for (var i = 0; i < arguments.length; i++) {
var element = document.getElementById(arguments[i]);
if (!element.checkValidity() && (!element.validationMessage || element.validationMessage === null || element.validationMessage === '')) {
return false;
}
}
}
return result;
}