对于HTML表单输入字段,disabled =“ disabled”和readonly =“ readonly”有什么区别?


Answers:


728

一个readonly元素就是不可编辑,但是当根据被发送form的提交。一个disabled元素是不可编辑和提交不发送电子邮件。另一个区别是readonly元素可以集中(而在通过表格“制表”时要集中)元素不能集中disabled

这篇很棒的文章w3c的定义中阅读更多有关此的内容。引用重要的部分:

关键差异

禁用属性

  • 禁用的表单元素的值不会传递到处理器方法。W3C将此称为成功元素(其工作方式类似于未选中的表单复选框。)
  • 某些浏览器可能会为禁用的表单元素覆盖或提供默认样式。(灰色或浮雕文字)Internet Explorer 5.5对此特别讨厌。
  • 禁用的表单元素不会获得焦点。
  • 在选项卡导航中会跳过禁用的表单元素。

只读属性

  • 并非所有表单元素都具有只读属性。最值得注意的是<SELECT>,,<OPTION><BUTTON>元素没有只读属性(尽管它们都有禁用的属性)
  • 浏览器不提供表单元素为只读的默认覆盖的视觉反馈。(这可能是一个问题……请参阅下文。)
  • 设置了readonly属性的表单元素将被传递到表单处理器。
  • 只读表单元素可以获得焦点
  • 选项卡式导航中包含只读表单元素。

5
在只读元素上,您不能使用CTRL + C,但是可以使用鼠标右键单击并选择“复制”。
Rumplin 2014年

7
@Rumplin你确定吗?我只是测试,并能够在Chrome浏览器中的键盘快捷方式在OS X复制
evanrmurphy

5
“并非所有表单元素都具有只读属性。最显着的是,<SELECT>,<OPTION>和<BUTTON>元素没有只读属性(尽管它们都具有禁用的属性)”。这就是为什么有时您必须将“禁用”属性与隐藏输入字段一起用于选择表单的原因。
多纳托2015年

在当前版本的Chrome中,只读元素无法获得焦点。如果您希望用户能够滚动显示比输入大小更长的值,那么这是有问题的。
Mike Feltman 2015年

5
所以我的理解disabled 意味着 readonlyreadonly不暗示disabled。换句话说,如果元素具有disabled属性,则无需也包含该readonly属性。正确?
chharvey 2015年

91

当元素具有禁用属性时,不会触发任何事件。

以下任何都不会触发。

$("[disabled]").click( function(){ console.log("clicked") });//No Impact
$("[disabled]").hover( function(){ console.log("hovered") });//No Impact
$("[disabled]").dblclick( function(){ console.log("double clicked") });//No Impact

而只读将被触发。

$("[readonly]").click( function(){ console.log("clicked") });//log - clicked
$("[readonly]").hover( function(){ console.log("hovered") });//log - hovered
$("[readonly]").dblclick( function(){ console.log("double clicked") });//log - double clicked

35

禁用表示提交表单时不会提交该表单元素中的任何数据。只读意味着将提交元素中的任何数据,但用户无法更改。

例如:

<input type="text" name="yourname" value="Bob" readonly="readonly" />

这将为元素“您的名字”提交值“ Bob”。

<input type="text" name="yourname" value="Bob" disabled="disabled" />

这将不会为元素“您的姓名”提交任何内容。


6
这两个readonlydisabled是布尔值。使用disabled代替disabled="disabled"(与只读相同)
Raptor

5
两者在语义上都是正确的。HTML5允许您使用其中一种。
Michael Irigoyen 2014年

3
不建议使用上下文属性而只使用属性名称而不使用值的警告-因为这样,代码将不是有效的XML / XHTML。我知道很多开发人员并不关心这些,但是他们至少应该意识到陷阱。就我个人而言,我努力争取符合XHTML-除非给出令人信服的理由(我尚未收到),所以我使用长/重复格式。
underscore_d 2015年

1
@ToolmakerSteve您是否指定空字符串是有效的XHTML?我只能找到说它对HTML5有效的评论页面。我见过的所有谈论XHTML的人都说,布尔属性的形式必须为attrname="attrname"。无论哪种方式,它似乎都没有得到特别详尽的记录,至少我找不到。好吧,这是-w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2-但它只具体提到了SGML和HTML,而不是XHTML...。首字母缩略词:S
underscore_d

1
...但跳过存在/不存在就足够的HTML的位-我们得到了这一点,它大概是由于省略而适用于XHTML:Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected").因此,空字符串似乎无效。
underscore_d


1

如果在清除(重置)表单后需要保留禁用的文本框的值, disabled = "disabled"则必须使用它,因为只读文本框不会保留该值

例如:

的HTML

文本框

<input type="text" id="disabledText" name="randombox" value="demo" disabled="disabled" />

复位按钮

<button type="reset" id="clearButton">Clear</button>

在上面的示例中,当按清除按钮时,禁用的文本值将保留在表单中。在以下情况下将不保留价值input type = "text" readonly="readonly"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.