做个工单详情页,内容要让用户能看能复制但不能改,给 textarea 加个属性就够,不用写 JS 去拦键盘事件。对应的属性是 readonly。
基础写法
<textarea readonly>这段内容只能看,不能改,但可以全选复制</textarea>HTML5 里布尔属性直接写 readonly 就生效。textarea只读之后外观不变,光标还能点进去、文字能选中复制,只是键盘敲不进去,但 Ctrl+A 全选、Ctrl+C 复制照常能用,这是它和 disabled 最直观的差别。JS 里对应 element.readOnly = true,设回 false 就恢复可编辑。
readonly 和 disabled 的区别
- 外观:disabled 会把整个框置灰,readonly 外观不变
- 表单提交:readonly 的值会随表单一起提交,disabled 的不会,后端拿不到这个字段
- 焦点:readonly 能获得焦点、能 Tab 进去,disabled 不能
- 适用:readonly 用于「先展示后可改」的场景,disabled 用于「这个字段彻底不可用」
按场景选
订单号、流水号这类系统生成的字段,用 readonly 展示,既能让用户复制,表单提交时值也能带上;审核未通过要把输入框整个禁掉,用 disabled。表单里有不想让用户改但后端要收的字段,千万别顺手写成 disabled,数据默默丢了都不好查。移动端表现一致:readonly 有的机型会弹软键盘但输入无效,不用特意处理。
选择标准:只要用户还需要复制内容、后端还需要拿到这个值,就用 readonly;连复制都不需要的占位展示才用 disabled。别用 CSS 或者 JS 拦截键盘事件去模拟只读,原生属性最稳,浏览器兼容也省心。