【问题标题】:What's the difference between disabled="disabled" and readonly="readonly" for HTML form input fields?HTML 表单输入字段的 disabled="disabled" 和 readonly="readonly" 有什么区别?
【发布时间】:2011-12-05 13:15:52
【问题描述】:

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

【问题讨论】:

标签: html cross-browser


【解决方案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"的情况下不会保留值

【讨论】:

    【解决方案2】:

    readonly 元素是不可编辑的,但会在相应的 form 提交时发送。 disabled 元素不可编辑,也不会在提交时发送。另一个区别是readonly 元素可以聚焦(并且在通过表单“切换”时获得聚焦)而disabled 元素不能。

    this great articlethe definition by w3c 中了解更多信息。引用重要部分:

    主要区别

    禁用属性

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

    只读属性

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

    【讨论】:

    • 在只读元素上不能使用 CTRL + C 但可以使用鼠标右键单击并选择复制。
    • @Rumplin 你确定吗?我刚刚测试并能够在 OS X 上使用 Chrome 中的键盘快捷键进行复制。
    • “并非所有表单元素都有只读属性。最值得注意的是,
    • 在当前版本的 Chrome 中只读元素无法获得焦点。如果您希望用户能够滚动浏览比输入大小更长的值,这将是有问题的。
    • 所以我的理解是disabled 暗示 readonlyreadonly 并不暗示disabled。换句话说,如果一个元素具有disabled 属性,那么就不需要同时包含readonly 属性。对吗?
    【解决方案3】:

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

    以下都不会被触发。

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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

        禁用意味着在提交表单时不会提交来自该表单元素的任何数据。只读意味着元素内的任何数据都将被提交,但用户不能更改。

        例如:

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

        这将为元素“yourname”提交值“Bob”。

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

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

        【讨论】:

        • readonlydisabled 都是布尔值。使用disabled 而不是disabled="disabled"(只读相同)
        • 两者在语义上都是正确的。 HTML5 允许您使用任何一种。
        • 无上下文警告只使用属性名称而不使用值是不明智的 - 因为那样代码将不是有效的 XML/XHTML。我知道很多开发人员并不关心这些,但他们至少应该意识到其中的陷阱。就我个人而言,我努力实现 XHTML 合规性 - 除非给出令人信服的理由,但我还没有收到 - 所以我使用长/重复的形式。
        • @ToolmakerSteve 你有规范引用空字符串是有效的 XHTML 吗?我只能找到评论页面说它对 HTML5 有效。我见过的每个谈论 XHTML 的人都说它的布尔属性形式必须是attrname="attrname"。无论哪种方式,它似乎都不是特别有据可查,至少不是我能找到的。嗯,有这个 - w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 - 但它只特别提到了 SGML 和 HTML,而不是 XHTML.... 缩略词太多:S
        • ...但是跳过 HTML 的位,存在/不存在就足够了 - 我们得到了这个,这可能适用于 XHTML 的省略:Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected"). 所以空字符串似乎没有有效。
        猜你喜欢
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        • 2015-02-01
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        相关资源
        最近更新 更多