当禁用HTML表单控件元素时,这意味着无法选择,单击,键入内容,也不再接受焦点。同样,默认情况下,浏览器将此类表单控件显示为灰色。
在本文中,您将了解如何使用HTML disabled
布尔值属性,如何使用JavaScript和禁用样式的表单控件对其进行切换。
摘要
- HTML
disabled
布尔值属性- 禁用的字段集
disabled
!=readonly
- 该
aria-disabled
属性
disabled
用JS 切换状态- 射击事件
- 设置
disabled
表单控件的样式- “禁用”链接
- 默认用户代理
disabled
样式
HTML disabled
布尔值属性
根据WHATWG的说法,HTML disabled
属性受一组有限的HTML元素和新引入的与表单相关的自定义元素的支持:
button
fieldset
optgroup
option
select
textarea
input
在本文中,我们将只关注基本的HTML元素,因此这是一个具有disabled
属性的复选框输入:
请注意disabled
,由于属性具有布尔逻辑,因此实际上并不需要为其设置值。因此,考虑到元素上存在布尔属性,以下所有值都是多余的,disabled
无论如何结果都是一种行为:
disabled="disabled"
disabled="true"
disabled="false"
disabled="whatever"
禁用的字段集
HTML fieldset
元素用于对Web表单中的多个控件进行分组。如果在disabled
上设置了boolean 属性fieldset
,则其中包含的所有表单控件也将被禁用。
这是一个示例,其中两个表单控件由于被禁用fieldset
元素包装而被禁用。
disabled
!= readonly
与readonly
表单控件相比,那些控件disabled
不在表单内提交,因此在进行form
验证时也将忽略它们。此外,disabled
窗体控件也不是可聚焦的。
该aria-disabled
属性
如果您可以使用具有内置要求的语义和行为的本机HTML元素或属性,而不是重新使用元素并添加ARIA角色,状态或属性以使其可访问,则可以这样做。
从W3C
当使用HTML元素(例如表单控件)时,它本身支持disabled
boolean属性,则不需要该aria-disabled
属性。
史蒂夫·福克纳(Steve Faulkner)在残障/失禁用症属性上写了一篇不错的文章,因此您应该检查一下!
disabled
用JS 切换状态
您可以利用以下事实:该.disabled
属性返回布尔值,因此可以使用以下命令轻松地对其进行切换:
此外,除了经典removeAttribute()
和setAttribute()
方法外,您还可以使用toggleAttribute()
方法来切换disabled
属性或任何其他布尔属性。尽管浏览器支持并不完美,但这可能会派上用场:
射击事件
谈到禁用元素和JavaScript,Jake Archibald写了一篇有趣的文章,介绍了在禁用表单控件上触发事件,他在其中争论了pointer-events: none
在所有:disabled
元素上使用的必要性。
通过更好的浏览器对:is()
(以前为,:any()
或:matches()
,@ SelenIT2指出的)CSS伪类的支持,以下是我们编写防弹CSS规则的方法,以防止在禁用的表单控件上发生交互和事件问题:
fieldset
上述规则中排除了该元素,以避免破坏title
包装在其中的其他元素或属性。
设置disabled
表单控件的样式
有两种使用CSS选择禁用元素的方法:
- 旧的
[disabled]
属性选择器可用于具有disabled
属性的任何HTML元素用户,并且实际上不必是表单控件元素。 - 选择器级别3中
:disabled
引入的伪类是选择禁用元素的首选方法,因为它与仅支持该属性的HTML元素匹配。disabled
“禁用”链接
链接不是button
,都不div
是,span
或其他任何形式。a
元素仍然可以在不带href
属性的情况下用作占位符链接。
如果该
a
元素没有href属性,则该元素表示一个占位符,用于否则可能会放置链接的位置。从WHATWG
我们知道:disabled
CSS伪类仅适用于本机支持disabled
属性的表单控件,而a
元素不在其中。
因此,以下CSS规则包含[disabled]
属性选择器和.disabled
类选择器。您知道,以防万一您需要,需要或必须使用它,<a disabled>...</a>
而不是<a class="disabled">...</a>
在特定情况下使用。
如果您想知道为什么还要禁用链接元素,那么我想到了一个场景,并且我确定您之前也确实迷失了这一点:
假设您在导航中有一个活动项目,显示它是该导航中的活动URL。现在,除了应用的活动样式之外,您可能还希望阻止用户单击并刷新他所在的已经活动的页面。
默认用户代理disabled
样式
如果您想知道所有这些默认的禁用样式的来源,以下是最受欢迎的用户代理样式的列表,请随时关注:
- 铬
- Mozilla
- WebKit
结论
- IE 11及以下版本不完全支持上的boolean
disabled
属性fieldset
。 - 在将CSS
pointer-events: none
声明添加到链接时,为了尝试禁用它,您还应该考虑应用tabindex="-1"
以便将其从制表符顺序中删除。 - 没有充分的理由使用CSS
[disabled]
属性选择器来支持:disabled
伪类。也许需要IE6-IE8支持,这绝对不是一个好理由。 - 与boolean
disabled
属性相比,将aria-disabled
设置为属性时,确实需要true
或的值false
。 - 如果
aria-disabled="false"
与disabled
属性一起在表单控件上设置,则后者具有更高的特异性, 并且该aria-disabled
属性将被忽略。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/courses/259417.html