我将此方法用于我的项目,因此无效字段仅在提交后才会突出显示:
HTML:
<form>
<input type="email" required placeholder="Email Address">
<input type="password" required placeholder="Password">
<input type="submit" value="Sign in">
</form>
Run Code Online (Sandbox Code Playgroud)
CSS:
input.required:invalid {
color: red;
}
Run Code Online (Sandbox Code Playgroud)
JS(jQuery):
$('[type="submit"]').on('click', function () {
// this adds 'required' class to all the required inputs under the same <form> as the submit button
$(this)
.closest('form')
.find('[required]')
.addClass('required');
});
Run Code Online (Sandbox Code Playgroud)
除了@Alexander Farkas 的帖子之外,Dave Rupert 这里还有一个非常可行的解决方案:Happier HTML5 Form Validation。
本质上,它的作用是添加一个 CSS 类来形成仅在用户尝试提交表单后才显示的输入元素。这是更好的用户体验,因为默认情况下,或者当用户通过选项卡浏览它们时,这些元素不会显示无效的样式,从而增强了可访问性。
在发现这一点之前,我尝试过使用:invalid:focus
和其他伪元素来设置元素的样式,但没有获得所需的效果。尽管我尝试尽可能使用纯 CSS 进行样式设置,但这看起来像是一个高效 JS 是实用解决方案的用例。
非常简单,只需使用#ID:invalid:focus
仅在侧重于页面加载时才进行验证
不,没有什么是开箱即用的。
Mozilla拥有自己的伪类,用于类似“:-moz-ui-invalid”的名称。如果要实现这样的目标,则必须使用约束验证DOM-API:
if(document.addEventListener){
document.addEventListener('invalid', function(e){
e.target.className += ' invalid';
}, true);
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用webshims lib polyfill,这不仅将不支持polyfill的浏览器,而且还会向所有浏览器添加类似-moz-ui-invalid的东西(.form-ui-invalid)。