【问题标题】:Does display: none disable an <input>?display: none 会禁用 <input> 吗?
【发布时间】:2015-02-25 22:24:41
【问题描述】:

我之前遇到过这样的现象,如果&lt;input&gt;标签有CSS属性display: none,那么它的值不会和它的父表单一起提交。我现在处于这种行为有帮助的奇怪情况!

我可以依靠display: none 来防止在提交表单时包含输入,还是在技术上与规范有偏差?

编辑:到目前为止的答案都集中在其他方法上,以及后端验证的必要性,所以让我说清楚;我知道这是一种有点奇怪的做事方式,而且我知道我需要在后端进行验证。我已经是;只是我返回的参数的格式使我的处理的一个特定方面有点棘手。

为了更清楚地重新表述这个问题:是否有可靠的 CSS 内方法来防止输入包含在其表单中?似乎将字段的 display 设置为none 有效,但我无法判断它是否应该有效。我不关心用户可能编辑前端 HTML / CSS,因为我会在后端捕捉到它。您可以假设一个非恶意用户。

【问题讨论】:

  • 如果你想禁用输入,为什么不直接使用&lt;input type="input" disabled&gt;
  • @DanielWilliams - 这很容易被覆盖,即如果您有萤火虫,只需删除此属性即可启用输入(无数种方式之一)。永远不要相信用户输入,确保在后端也禁用输入。
  • 我为什么要这样做?我有一个二维单选按钮数组 - 只能选择一个,但哪一个控制两个概念上不同的值。我目前正在使用串联的值作为无线电输入值;但我正在考虑使用复选框来选择性地display: none 一对隐藏输入。
  • @dwhite.me - 别担心,这一切都在后端得到验证 :)
  • @dwhite.me 这不是一个很好的论点.. 因为如果用户打开 firebug 以删除 disabled 他们可以很容易地取消选中 display:none 旁边的复选框...添加 @ 987654330@ 是禁用输入的跨浏览器标准。

标签: html css forms


【解决方案1】:

没有。您绝对应该使用disabled 属性。

使用 HTML5,当必填字段设置为 display:none 时,某些浏览器(例如 Chrome)甚至会阻止您提交表单

【讨论】:

  • disabled 会很好,但我想根据是否选择单选按钮有选择地启用/禁用字段,并且我试图避免使用 JS 解决方案(作为渐进的一点增强)。我无法从 CSS 中设置 disabled
  • CSS 并不是为了改变元素的行为,而只是为了改变 style。 JS 是你改变行为的方式
【解决方案2】:

如果单选按钮代表两组复杂的值,听起来您将这些信息存储为单选按钮的 value 属性是正确的。

也就是说,既然您已经让用户选择一个单选按钮来确定哪些隐藏输入是适用的,那么为什么不能在验证代码中处理它呢?您可以先检查单选按钮的值,然后执行一项或多项操作。

这会使某人更难处理您的代码,因为表单不会根据用户交互而改变,只有处理过的项目会改变。有人无法启用禁用的隐藏表单元素,因为不会有,不适用的将被忽略。

【讨论】:

  • 我可以处理验证码中的值。我目前这样做。但是由于各种原因,如果 - 假设一个非邪恶用户等等 - 我可以期望收到两个由无线电管理的单独值,而不是一个单一的组合值,我的生活会容易得多。
【解决方案3】:

您不能依赖它,因为用户可以向该输入添加值,但如果它只是为了传递一些信息,例如第二个表单等等,请确保始终在后端验证它!您可能想考虑使用 php 会话 :)

【讨论】:

  • 正如我已经评论过的,现在编辑了,我知道用户可能会弄​​乱前端,我需要后端验证。我已经这样做了。在用户没有做任何不寻常的事情的情况下,我试图让我的生活更轻松。
猜你喜欢
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2011-01-11
  • 2014-03-28
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多