Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查浏览器是否具有内置HTML5表单验证?_Html_Validation - Fatal编程技术网

检查浏览器是否具有内置HTML5表单验证?

检查浏览器是否具有内置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

如何检查浏览器是否具有内置HTML5表单验证功能?这样,我们就不需要在能够自己验证表单的浏览器上应用jQuery表单验证函数

[已解决] 根据ThinkingStiff的回答,以下是一种方法:

if (typeof document.createElement("input").checkValidity == "function") {
    alert("Your browser has built-in form validation!");
}

您可以使用Modernizer javascript来实现这一点。你可以从这篇文章中得到帮助。您还可以利用Modernizer负载

modernizer.load()的基本语法是向其传递一个具有以下属性的对象:

  • 测试:要检测的Modernizer属性
  • 是:如果测试成功,要加载的脚本的位置。对多个脚本使用一个数组
  • 否:测试失败时要加载的脚本的位置。对多个脚本使用一个数组
  • 完成:加载外部脚本后立即运行的函数(可选)
yep和nope都是可选的,只要您提供其中一个

要加载并执行check_required.js中的脚本,请在modernizr.adc.js附加到页面后添加以下块(代码位于required_load.html中):


现代化负荷({
测试:需要现代化输入,
否:“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;
}