使文本输入字段看起来被禁用,但只读

Posted

技术标签:

【中文标题】使文本输入字段看起来被禁用,但只读【英文标题】:Making a text input field look disabled, but act readonly 【发布时间】:2011-12-06 06:59:29 【问题描述】:

我有一个 html 输入字段,我希望用户能够看到但不能编辑。如果我将该字段标记为“已禁用”,则它不会与表单的其余部分一起提交。如果我将它标记为“只读”,它的行为就像我想要的那样,但仍然看起来启用(至少在 Chrome 上)。

基本上,我希望输入字段看起来 像一个禁用字段,但 表现 为只读字段。这可能吗?

谢谢。

编辑:另外,如果我将其标记为“只读”,仍然可以通过双击它并选择以前存在的内容来更改其值。

【问题讨论】:

【参考方案1】:

这里是解决方法:您在需要的地方禁用了输入(仅用于显示值),并有一个带有您需要的名称和值的隐藏输入。

【讨论】:

请注意,这并不能防止篡改表单。这一切都只是外表。因此,请参阅this question 以防止篡改。 不优雅——不是你的错! - 但可能是唯一的解决方案 不幸的是,您最终得到了导致问题 (HDIV) 的额外字段【参考方案2】:

您可以使用 css 使其看起来像您想要的那样,尽管这可能与跨浏览器/平台的其他禁用字段不匹配。

<input type="text" value="Sample text" readonly="readonly" style="color: #787878;"/>

【讨论】:

这可以通过设置所有表单元素的样式来实现。【参考方案3】:

我在使用 JSF 时遇到了类似的问题,其中隐藏字段可用于保存我需要的值,但如果在提交时表单验证失败,则只读或禁用输入字段中的值将被清除。我找到了一个替代解决方案,通过让输入字段在技术上可编辑,它似乎工作得相当优雅,但它通过在收到焦点后立即进行模糊来防止编辑。虽然您的服务器端环境可能没有我对 JSF 所做的相同问题(即使从标记为只读的输入字段也不会提交值),但您可能可以在您的情况下使用相同的技术,使用结果是您不需要单独的隐藏字段来保留该值。然而,与第二个答案一样,它并没有解决禁用字段 look 的问题,至少在没有一些额外的 CSS 代码的情况下不会。

JSF中的代码:

<p:inputText id="entid" value="#RequestBean.entityID" onfocus="blur();" />

变成下面的 HTML:

<input id="entid" type="text" value="10003" onfocus="blur();" />

您可以在此处查看更多信息:How to persist JSF view parameters through validation

【讨论】:

【参考方案4】:

我知道这已被回答,但我想给出我的 CSS 示例。

因为当我在寻找解决方案时,如何设置输入字段的样式以使其看起来像是被禁用,所以我总是以这样的输入字段结束。

左边框和上边框颜色较深等。因此使用此 CSS 代码解决了它。

input[readonly]
  border-color: darkgrey;
  border-style: solid;
  border-width: 1px;
  background-color: rgb(235, 235, 228);
  color: rgb(84, 84, 84);
  padding: 2px 0px;

发了jsfiddle,这样你们就可以仔细看看了。

在 Chrome 上看起来不错,在其他浏览器上你需要修改颜色。像在 Firefox 中一样,您也需要将颜色和背景颜色更改为等。

background-color: rgb(240, 240, 240);
color: rgb(109, 109, 109);

【讨论】:

以上是关于使文本输入字段看起来被禁用,但只读的主要内容,如果未能解决你的问题,请参考以下文章

使input文本框不可编辑的3种方法

如何使 html 文本输入只读但能够使用脚本进行更新?

如何使 MFC 复选框只读但保持启用文本?

jquery 使字段不可编辑,没有只读或禁用

使input文本框不可编辑的3种方法

HTML文本输入事件