html - 如果标签为空,则在取消选择时为所需的输入标签设置样式
问题描述
我有一个可能看起来像的输入标签
<input required pattern="..." >
如果该标签为空或该字段与模式不匹配,我想以不同的方式设置此标签的样式(边框周围为红色),但前提是该字段已被访问过。
如果我打开包含表单的页面,我希望所有字段的样式都正常。
如果我单击必填字段,然后
- 按标签
- 单击另一个字段
- 或提交表格
而该领域是
- 还是空的
- 或填写无效输入,或单击另一个字段
然后想要这个字段的样式不同
我知道:required
和:invalid
伪类标签,但我不知道如何将其限制为仅已访问过的字段,因为该:visited
标签仅适用于链接
解决方案
您可以为每个输入添加一个焦点事件侦听器,该侦听器添加一个您可以在 :invalid 时设置样式的类。这样,除非存在“一直处于焦点”类,否则永远不会应用无效样式。
const inputEmail = document.getElementById('email');
const inputNumber = document.getElementById('number');
inputEmail.addEventListener('focus', () => {
inputEmail.classList.add('has-been-focused');
});
inputNumber.addEventListener('focus', () => {
inputNumber.classList.add('has-been-focused');
});
input {
outline: none;
}
.has-been-focused:invalid {
border: 5px solid red;
}
<input id="email" placeholder="Email" type="email" required />
<input id="number" placeholder="Number" type="number" required />
推荐阅读
- session - Azure 服务总线 - 会话将消息复制到多个实例
- python - 使用 Pandas 和 SQLAlchemy 时出错
- angular - Angular 6 - HttpInterceptors - HttpResponse 正文没有被修改
- vue.js - 如何确认我使用的是 Vue 的“完整版本”?
- microsoft-graph-api - 使用 Microsoft Graph 登录的用户的图像 URL
- excel - Excel中具有搜索功能的多个IF语句
- php - 从 php 中的图像标签中过滤图像名称
- python - ImportError:没有名为“tensorflow.core”的模块
- java - 如何在存储库中合并过滤器领域结果和网络搜索
- windows - IMsRdpDeviceV2 是否记录在 MSDN 中,但在 mstscax.dll 中不可用?