一聚教程网:一个值得你收藏的教程网站
PHP教程 Css教程 操作系统 数据库 安卓下载 AI头条
模型世界
陪审法庭
建造伐木场
老爹炸鸡店hd
炼金工房:布蕾塞尔的炼金术士
模拟杀手营地
火柴人影子战士
极限逃脱
坦克连
奥特曼铠甲飞车内购修改版
诛仙2鬼王怎么加点 鬼王加点推荐
诛仙2见影灵泉奇遇任务怎么做 见影灵泉奇遇任务流程攻略
三国天下归心诸葛亮怎么样 诸葛亮技能介绍一览
三国天下归心追击队怎么玩 追击队玩法教学
三国天下归心武将怎么获得 武将获取方法
星痕共鸣剧毒蜂巢怎么获取 剧毒蜂巢获取攻略
新三国志曹操传李儒之影怎么打 李儒之影打法教学
辉烬队伍怎么搭配 配队攻略指南
创造吧我们的星球种田玩法怎么玩 种田玩法介绍一览
华夏千秋怎么表白 表白方法一览
时间:2026-07-01 11:17:58 编辑:袖梨 来源:一聚教程网
嵌套 input 仍可点击提交,因 fieldset 的禁用递归仅对原生控件生效且依赖严格 DOM 继承链;显式 disabled 属性、脱离 fieldset 子树、legend 内部、框架封装导致继承链断裂均使其失效。
input
disabled=""
disabled="false"
disabled
fieldset
display: contents
position: absolute
legend
<legend><input></legend>
<MyInput v-model="name" />
<div>
<span>
createPortal
v-if
teleport
验证方式很简单:打开开发者工具,右键点击目标 input → “Reveal in Elements Panel”,确认它是否真正在 fieldset 标签下(而非外层 div 或 portal 容器内)。若不在,fieldset 的 disabled 就完全无效。
div
el.hasAttribute('disabled')
el.disabled
el.disabled === false
false
可靠方案是:
el.matches(':disabled')
true
function isTrulyDisabled(el) { if (el.disabled) return true; let p = el.parentElement; while (p && !(p instanceof HTMLFieldSetElement)) p = p.parentElement; return !!(p && p.disabled && !p.querySelector('legend')?.contains(el)); }
注意:这个函数必须排除 legend 内部的元素,否则误判。
<fieldset disabled><fieldset><input></fieldset></fieldset>
<fieldset disabled><fieldset disabled="false"><input></fieldset></fieldset>
<fieldset>
el.disabled = false
<fieldset><fieldset disabled><input></fieldset></fieldset>
真正容易忽略的是:禁用状态不跨 legend 传播。哪怕你把整个 fieldset 包进另一个 fieldset,只要 input 在 legend 里,它就永远逃逸。
复杂点不在嵌套本身,而在 DOM 结构是否干净、框架是否透传、以及 legend 是否意外包裹了可交互内容。