必需属性HTML5

Joo*_*oop 80 html5

在我的Web应用程序中,我正在为表单字段使用一些自定义验证.在同一表格中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单.

大多数情况下,我使用Safari作为默认浏览器.现在Safari 5出来了,突然我的取消/重置按钮不再起作用了.每次我点击重置按钮时,我表单中的第一个字段确实得到了焦点.但是,这与我的自定义表单验证相同.当用另一个浏览器尝试时,一切都运行良好.我不得不成为Safari 5的问题.

我在我的Javascript代码中改变了一点,我发现以下行导致了问题:

document.getElementById("somefield").required = true;
Run Code Online (Sandbox Code Playgroud)

为了确保这确实是问题,我创建了一个测试场景:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>

<body>
    <form id="someform">
        <label>Name:</label>&nbsp;<input type="text" id="name" required="true" /><br/>
        <label>Car:</label>&nbsp;<input type="text" id="car" required="true" /><br/>
        <br/>
        <input type="submit" id="btnsubmit" value="Submit!" />
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我预期会发生什么事.第一个字段"名称"确实自动获得焦点.

其他人偶然发现了这个?

Ms2*_*ger 255

注意

<input type="text" id="car" required="true" />
Run Code Online (Sandbox Code Playgroud)

是错的,它应该是其中之一

<input type="text" id="car" required />
<input type="text" id="car" required="" />
<input type="text" id="car" required='' />
<input type="text" id="car" required=required />
<input type="text" id="car" required="required" />
<input type="text" id="car" required='required' />
Run Code Online (Sandbox Code Playgroud)

这是因为该true值表明该false值将使表单控件可选,但实际情况并非如此.

  • 我想指出原始代码不是"错误的",它只是暗示你可以使用`false`来使字段可选(不是必需的) - 事实并非如此.你必须理解的是,`required`属性的存在使得该字段成为必需.使字段可选的唯一方法是删除属性.并且服务器端验证都非常重要(抱歉尖叫). (8认同)
  • 这个答案是对的,但我认为这不是我们在这里遇到的问题. (7认同)
  • +1.好眼力.我很想念这个. (3认同)

小智 49

我刚刚使用Safari 5遇到了这个问题,它已经成为Opera 10的一个问题了一段时间,但我从未花时间修复它.现在我需要修复它并看到你的帖子但还没有关于如何取消表单的解决方案.经过多次搜索,我终于发现了一些东

http://www.w3.org/TR/html5/forms.html#attr-fs-formnovalidate

<input type=submit formnovalidate name=cancel value="Cancel">
Run Code Online (Sandbox Code Playgroud)

适用于Safari 5和Opera 10.

  • 您还可以在表单标记上使用`novalidate`来为整个表单执行此操作. (8认同)

Dav*_*ter 19

如果我正确地理解了您的问题,那么该required属性在Safari中是否会出现默认行为,这让您感到困惑?如果是这样,请参阅:http://w3c.github.io/html/sec-forms.html#the-required-attribute

required 不是HTML 5中的自定义属性.它在规范中定义,并且以您目前使用它的方式使用.

编辑:嗯,不准确.正如ms2ger所指出的那样,该required属性是一个布尔属性,这就是HTML 5规范对这些属性的说法:

注意:布尔属性不允许使用值"true"和"false".要表示错误值,必须完全省略该属性.

请参阅:http://w3c.github.io/html/infrastructure.html#sec-boolean-attributes

  • 这就是为什么我们不应该在标准对象上组成自定义属性或属性. (2认同)

Eva*_*ans 8

Safari 7.0.5仍不支持输入字段验证通知.

要克服它,可以编写这样的回退脚本:http: //codepen.io/ashblue/pen/KyvmA

要查看浏览器支持的HTML5/CSS3功能,请访问:http: //caniuse.com/form-validation

function hasHtml5Validation () {
  //Check if validation supported && not safari
  return (typeof document.createElement('input').checkValidity === 'function') && 
    !(navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0);
}

$('form').submit(function(){
    if(!hasHtml5Validation())
    {
        var isValid = true;
        var $inputs = $(this).find('[required]');
        $inputs.each(function(){
            var $input = $(this);
            $input.removeClass('invalid');
            if(!$.trim($input.val()).length)
            {
                isValid = false;
                $input.addClass('invalid');                 
            }
        });
        if(!isValid)
        {
            return false;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

SASS/LESS:

input, select, textarea {
    @include appearance(none);
    border-radius: 0px;

    &.invalid {
        border-color: red !important;
    }
}
Run Code Online (Sandbox Code Playgroud)


Lud*_*der 7

关于自定义属性的一个小注释:HTML5允许所有类型的自定义属性,只要它们以粒子为前缀data-,即data-my-attribute="true".