html中input只读属性readonly 和 disable的区别

本文详细阐述了HTML中Readonly与Disabled属性的区别。Readonly仅适用于文本输入框,提交时仍保留值;Disabled则适用于所有表单元素,提交时忽略其值。此外还介绍了两种属性在实际场景中的应用。

Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容。但是它们之间有着微小的差别,总结如下:

     Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,但是表单元素在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)。

 

一般比较常用的情况是:

  1. 在某个表单中为用户预填了某个唯一识别代码,不允许用户改动,但是在提交时需要传递该值,此时应该将它的属性设置为readonly 。
  2. 经常遇到当用户正式提交了表单后需要等待管理员的信息验证,这就不允许用户再更改表单中的数据,而是只能够查看,由于disabled的作用元素范围大,所以此时应该使用disabled,但同时应该注意的是要将submit button也disabled掉,否则只要用户按了这个按钮,如果在数据库操作页面中没有做完整性检测的话,数据库中的值就会被清除。如果说在这种情况下用readonly来代替disabled的话,若表单中只有input(text / password)和textarea元素,那还是可以的,如果存在其他发元素,比如select,用户可以在重新改写值后按回车键进行提交(回车是默认的submit触发按键)
  3. 我们常常在用户按了提交按钮后,利用javascript将提交按钮disabled掉,这样可以防止网络条件比较差的环境下,用户反复点提交按钮导致数据冗余地存入数据库。

disabled和readonly这两个属性有一些共同之处,比如都设为true,则form属性将不能被编辑,往往在写js代码的时候容易混合使用这两个属性,其实他们之间是有一定区别的:

  • 如果一个输入项的disabled设为true,则该表单输入项不能获取焦点,用户的所有操作(鼠标点击和键盘输入等)对该输入项都无效,最重要的一点是当提交表单时,这个表单输入项将不会被提交
  • readonly只是针对文本输入框这类可以输入文本的输入项,如果设为true,用户只是不能编辑对应的文本,但是仍然可以聚焦焦点,并且在提交表单的时候,该输入项会作为form的一项提交。 
<think>我们正在讨论HTMLreadonlydisabled属性区别与联系。根据引用内容,我们可以总结如下: 1. **作用范围不同**: - `readonly` 属性仅对部分表单元素有效,如:`<input type="text">`, `<input type="number">`, `<textarea>`, `<input type="password">`等可以输入的表单元素(引用[1][2][3])。 - `disabled` 属性对所有表单元素都有效,包括:`<input>`, `<textarea>`, `<button>`, `<label>`, `<option>`, `<select>`等(引用[1][2][4])。 2. **对元素的影响程度不同**: - `readonly`: - 元素的值不能被用户修改(只读)。 - 用户仍然可以使用Tab键切换到该字段,可以选中拷贝其中的文本(引用[1][2])。 - 该元素会获得焦点(引用[2])。 - 在表单提交时,该元素的值会被提交(引用[2])。 - `disabled`: - 元素被禁用,不可用,不可点击,不可获得焦点,不可选中其中文本(引用[1][2])。 - 在表单提交时,该元素的值不会被提交(引用[2])。 3. **使用场景**: - 当希望用户不能修改某个字段的值,但需要该值被提交到服务器时,使用`readonly`(例如:显示用户ID,但不可修改)。 - 当希望完全禁用某个表单元素(包括交互提交),使用`disabled`(例如:根据条件禁用整个输入区域)。 4. **视觉表现**: - 通常,浏览器会将`disabled`的元素显示为灰色(不可用状态),而`readonly`元素外观与正常输入框一样(引用[1])。 5. **共同点**: - 两者都可以防止用户修改表单元素的值(对于支持`readonly`的元素而言)。 现在,我们可以按照要求组织答案,注意引用标记格式。</think>### HTML 中 `readonly` `disabled` 属性区别与联系 #### 一、核心区别总结 | 特性 | `readonly` 属性 | `disabled` 属性 | |----------------------|--------------------------------------------|--------------------------------------------| | **作用范围** | 仅限文本类输入元素:<br>`<input type="text">`, `<textarea>`, `<input type="password">`, `<input type="number">` [^1][^2][^3] | 所有表单元素:<br>`<input>`, `<textarea>`, `<button>`, `<select>`, `<option>`, `<label>` [^1][^2][^4] | | **元素交互** | 可获取焦点、支持 Tab 切换<br>可选中/复制文本 [^1][^2] | 不可获取焦点、不支持 Tab 切换<br>不可选中/复制文本 [^1][^2] | | **表单提交** | 值会随表单提交 [^2] | 值不会随表单提交 [^2] | | **视觉表现** | 外观与正常输入框相同 [^1] | 默认显示为灰色(不可用状态)[^1] | | **适用场景** | 需展示不可修改但需提交的数据<br>(如订单号、用户ID) | 需完全禁用交互的场景<br>(如未满足条件的提交按钮)| #### 二、详细对比分析 1. **交互行为差异** - `readonly` 元素: - 用户可聚焦、选中文本、复制内容(如按 Ctrl+C) - 支持通过 Tab 键切换焦点 [^1][^2] ```html <input type="text" value="只读文本" readonly> <!-- 可选中/复制 --> ``` - `disabled` 元素: - 完全阻断交互:无法点击、聚焦或选中内容 - 从 Tab 键遍历序列中移除 [^1][^2] ```html <button disabled>不可点击</button> <!-- 完全无响应 --> ``` 2. **表单提交行为** - `readonly` 字段的值会正常提交到服务器(如 `name=value`)[^2] - `disabled` 字段的值会被排除在提交数据之外 [^2] ```html <!-- 提交时: --> <input name="readonlyField" value="data" readonly> <!-- 提交数据包含 readonlyField=data --> <input name="disabledField" value="data" disabled> <!-- 无 disabledField 数据 --> ``` 3. **对非文本元素的影响** `readonly` 对以下元素无效(用户仍可操作): ```html <select readonly> <!-- 仍可下拉选择(无效) --> <option>选项1</option> </select> <input type="checkbox" readonly> <!-- 仍可勾选(无效) --> ``` 此时必须用 `disabled` 才能禁用交互 [^1][^3]。 #### 三、典型应用场景 1. **`readonly` 适用场景** - 展示系统生成的不可修改数据(如订单号、用户ID) - 预填充表单中需要用户查看但不可编辑的字段 ```html <label>订单号:</label> <input type="text" name="orderId" value="ORD2023" readonly> ``` 2. **`disabled` 适用场景** - 条件未满足时的提交按钮 - 禁用非当前步骤的表单区域 ```html <button id="submitBtn" disabled>提交</button> <!-- 待条件满足后启用 --> <fieldset disabled> <!-- 禁用整个字段组 --> <input type="text" placeholder="暂不可用"> </fieldset> ``` #### 四、特殊注意事项 1. **样式覆盖问题** 某些框架(如 Bootstrap)会为 `disabled` 元素添加特殊样式,但 `readonly` 通常无视觉变化,需手动添加只读样式: ```css input[readonly] { background-color: #f8f9fa; /* 浅灰色背景提示 */ } ``` 2. **动态切换建议** 通过 JavaScript 动态切换状态时: ```javascript // 原生 JS 切换 readonly document.getElementById("field").readOnly = true; // 原生 JS 切换 disabled document.getElementById("btn").disabled = false; ``` > 💡 **黄金法则**: > 需要提交数据 → 用 `readonly` > 需要完全禁用交互 → 用 `disabled` --- ### 相关问题 1. 如何通过 CSS 区分 `readonly` `disabled` 元素的样式? 2. 在动态表单中,如何批量启用/禁用多个 `disabled` 元素? 3. 为什么 `disabled` 的 `<select>` 元素提交时无法获取值?如何解决? 4. 如何让 `readonly` 的 `<input type="date">` 显示日期选择器? 5. 在响应式表单设计中,`readonly` `disabled` 对移动端交互有何不同影响? [^1]: 引用[1] [^2]: 引用[2] [^3]: 引用[3] [^4]: 引用[4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值