一聚教程网:一个值得你收藏的教程网站
PHP教程 Css教程 操作系统 数据库 安卓下载 AI头条
青春创造营
解压消除方块
憨豆快递
攻坚特勤军事
飞行员竞赛模拟器
暗夜微光
海盗战斗时代的船只内置菜单
充电武器
小镇冒险家
冰球进洞
币安怎么充值和提现USDT?交易所划转到钱包的完整操作教程
币安账户怎么保护安全?2FA验证、防钓鱼码和提现白名单设置步骤
币安合约手续费是多少?U本位/币本位合约手续费与资金费率教程
诛仙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 是否意外包裹了可交互内容。