什么';s禁用之间的差异=";残疾人士;和readonly=";只读“;用于HTML表单输入字段?

什么';s禁用之间的差异=";残疾人士;和readonly=";只读“;用于HTML表单输入字段?,html,cross-browser,Html,Cross Browser,我已经读了一些关于这方面的内容,但我似乎找不到任何关于不同浏览器如何处理事情的可靠信息。一个只读元素只是不可编辑,而是在相应的表单提交时发送。禁用的元素不可编辑,提交时不发送。另一个区别是,readonly元素可以被聚焦(当通过表单“tab”时可以聚焦),而禁用的元素不能聚焦 在或中阅读更多关于此的信息。引用重要部分: 关键差异 禁用的属性 禁用表单元素的值不会传递给处理器方法。W3C称之为成功元素 未选中的表单复选框。) 某些浏览器可能会覆盖或提供禁用表单元素的默认样式。(灰显或浮雕文本)I

我已经读了一些关于这方面的内容,但我似乎找不到任何关于不同浏览器如何处理事情的可靠信息。

一个
只读
元素只是不可编辑,而是在相应的
表单提交时发送。禁用的
元素不可编辑,提交时不发送。另一个区别是,
readonly
元素可以被聚焦(当通过表单“tab”时可以聚焦),而
禁用的
元素不能聚焦

在或中阅读更多关于此的信息。引用重要部分:

关键差异

禁用的属性

  • 禁用表单元素的值不会传递给处理器方法。W3C称之为成功元素 未选中的表单复选框。)
  • 某些浏览器可能会覆盖或提供禁用表单元素的默认样式。(灰显或浮雕文本)Internet Explorer 5.5在这方面尤其令人讨厌
  • 禁用的表单元素不接收焦点
  • 在选项卡导航中跳过禁用的表单元素
只读属性


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

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

例如:

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

这将提交元素“yourname”的值“Bob”


这将不会为元素“yourname”提交任何内容。

与其他答案相同(disabled不会发送到服务器,readonly是),但某些浏览器阻止高亮显示禁用的表单,而只读表单仍然可以高亮显示(并复制)

无法修改只读字段。但是,用户可以对其添加选项卡、高亮显示并从中复制文本


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

以下任何一项都不会被触发

$("[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
而只读将被触发

$("[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

如果在清除(重置)表单时需要保留禁用文本框的值,则必须使用
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”

的情况下,值将不会保留
readonly
disabled
都是布尔值。使用
disabled
而不是
disabled=“disabled”
(与readonly相同),两者在语义上都是正确的。HTML5允许您使用其中一种。无上下文警告仅使用属性名称而不使用值是不明智的,因为这样代码将不是有效的XML/XHTML。我知道很多开发者并不关心这些,但他们至少应该意识到这个陷阱。就我个人而言,我努力实现XHTML遵从性——除非给出一个令人信服的理由,我还没有收到这个理由——所以我使用长/重复的形式。@ToolmakerSteve您有没有说明空字符串是有效的XHTML?我只能找到评论页面说它对HTML5有效。我见过的每个谈论XHTML的人都说它的布尔属性形式必须是
attrname=“attrname”
。无论哪种方式,它似乎并没有特别好的记录,至少我找不到。嗯,有一个--但它只特别提到SGML和HTML,而不是XHTML。。。。太多的首字母缩略词:S…但是跳过了HTML的一位,其中存在/不存在就足够了-我们得到了这一点,这可能通过省略适用于XHTML:
Boolean属性可以合法地使用单个值:属性本身的名称(例如,selected=“selected”).
因此空字符串似乎无效。在只读元素上,您不能使用CTRL+C,但可以使用鼠标右键单击并选择“复制”。@Rumplin您确定吗?我刚刚测试并能够在OS X上使用Chrome中的键盘快捷键进行复制。“并非所有表单元素都具有只读属性。最值得注意的是,、和元素没有只读属性(尽管它们都具有禁用的属性)”。这就是为什么有时你必须为选择的表单使用带有隐藏输入字段的“disabled”属性。在当前版本的Chrome只读元素中,无法接收焦点。如果您希望用户能够滚动超过输入大小的值,这是有问题的。因此我的理解是,
禁用
意味着
只读
,但
只读
并不意味着
禁用
。换句话说,如果元素具有
disabled
属性,则不需要同时包含
readonly
属性。Correct?related:“如何模拟select标记的readonly属性,并且仍然获取POST数据?”