对于HTML表单输入字段,disabled ="disabled"和readonly ="readonly"之间的区别是什么?

And*_*ndy 398 html cross-browser

我已经对此有所了解,但我似乎无法找到关于不同浏览器如何处理事物的任何信息.

oez*_*ezi 684

一个readonly元素就是不可编辑,但是当根据被发送form的提交.一个disabled元素是不可编辑和提交不发送电子邮件.另一个不同之处在于readonly元素可以被聚焦(并且在通过表格"标记"时获得焦点)而disabled元素则不能.

这篇伟大的文章w3c的定义中阅读更多相关内容.引用重要部分:

关键差异

已禁用属性

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

只读属性

  • 并非所有表单元素都具有只读属性.最值得注意的是<SELECT>,<OPTION><BUTTON>元素没有readonly属性(尽管它们都具有禁用属性)
  • 浏览器不提供默认的重写视觉反馈,表单元素是只读的.(这可能是一个问题......见下文.)
  • 具有readonly属性集的表单元素将传递给表单处理器.
  • 只读表单元素可以获得焦点
  • 标签式导航中包含只读表单元素.

  • @Rumplin你确定吗?我刚测试过并且能够在OS X上的Chrome中使用键盘快捷键进行复制. (7认同)
  • 在readonly元素上,您不能使用CTRL + C,但您可以使用鼠标右键单击并选择复制. (5认同)
  • "并非所有表单元素都具有readonly属性.最值得注意的是,<SELECT>,<OPTION>和<BUTTON>元素没有readonly属性(尽管你们两个都禁用了属性)".这就是为什么有时你必须使用"禁用"属性与选择表单的隐藏输入字段. (5认同)
  • 所以我的理解是`disabled`*暗示*`readonly`但是`readonly`并不意味着'禁用'.换句话说,如果一个元素具有`disabled`属性,那么就不需要包含`readonly`属性.正确? (5认同)
  • 好吧,我来这里是为了纠正我上面的评论,但后来我意识到这是我过去的自己:facepalm:。但回答我自己的问题:不,“禁用”并不意味着“只读”。“disabled”输入的值不会在提交时与表单数据一起发送,而“readonly”输入的值则会随表单数据一起发送。 (3认同)
  • 该文章的回溯存档:http://web.archive.org/web/20150620041010/https://kreotekdev.wordpress.com/2007/11/08/disabled-vs-readonly-form-fields/ (2认同)

Hri*_*pta 90

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

以下都不会被触发.

$("[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
Run Code Online (Sandbox Code Playgroud)

虽然readonly将被触发.

$("[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
Run Code Online (Sandbox Code Playgroud)


Mic*_*yen 33

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

例如:

<input type="text" name="yourname" value="Bob" readonly="readonly" />
Run Code Online (Sandbox Code Playgroud)

这将为元素"yourname"提交值"Bob".

<input type="text" name="yourname" value="Bob" disabled="disabled" />
Run Code Online (Sandbox Code Playgroud)

这将不会为元素"yourname"提交任何内容.

  • 那些开发人员应该阅读规范.我的答案中的例子没有错. (11认同)
  • `readonly`和`disabled`都是布尔值.使用`disabled`而不是`disabled ="disabled"`(readonly相同) (6认同)
  • 两者在语义上都是正确的.HTML5允许您使用其中之一. (5认同)
  • 没有值的上下文通告只使用属性名称是不明智的 - 因为那时代码将不是有效的XML/XHTML.我知道很多开发者并不关心这些,但他们至少应该意识到这个陷阱.我个人努力遵守XHTML - 除非有令人信服的理由,我还没有收到 - 所以我使用了长/重复的表格. (3认同)

use*_*700 9

"已禁用元素"属性不会提交,也可能表示其值不会随请求一起发布.

<input type="textbox" name="field" value="field" disabled="disabled" />
Run Code Online (Sandbox Code Playgroud)

区别

  • 禁用的控件无法获得焦点.
  • 标签导航中会跳过已禁用的控件.
  • 禁用的控件无法成功发布.

如果要发布字段数据,请使用readonly属性.

<input type="textbox" name="field" value="field" readonly="readonly" />
Run Code Online (Sandbox Code Playgroud)
  • 只读元素获得焦点,但用户无法修改.
  • 标签导航中包含只读元素.
  • 只读元素已成功发布.


Tim*_*Tim 5

与其他答案相同(禁用不会发送到服务器,只读是),但一些浏览器阻止突出显示禁用的表单,而只读仍然可以突出显示(和复制)。

http://www.w3schools.com/tags/att_input_disabled.asp

http://www.w3schools.com/tags/att_input_readonly.asp

不能修改只读字段。但是,用户可以选择它,突出显示它,并从中复制文本。