禁用表单元素的 POST 值

Posted

技术标签:

【中文标题】禁用表单元素的 POST 值【英文标题】:POST values of disabled form elements 【发布时间】:2011-12-09 23:29:21 【问题描述】:

我有一个表单,我需要在其中禁用一组复选框和一些字段,以便用户无法更改/更改其值。但是,当我提交表单时,禁用元素的 POST 值丢失/为空。如果没有这个问题,我该如何管理我正在尝试做的事情?

现在我通过禁用容器 div 来禁用字段,如下所示:

#unselectable 
    -moz-user-select: -moz-none;
    -khtml-user-select: none;
    -webkit-user-select: none;
    -o-user-select: none;
    -webkit-user-select: none;
    cursor:not-allowed; 


【问题讨论】:

请停止标记你的标题。 【参考方案1】:

嗯,我能想到 3 个解决方案:

通过将readonly 属性添加到元素使其成为readonly。 在 CSS/javascript 中禁用它们。为它着色,就像它被禁用一样,并且不允许使用 JavaScript 进行编辑, 保持禁用状态,并在提交时移除禁用状态。

任你选:)

【讨论】:

如何在提交时删除禁用? 我编写了一个小脚本,它循环遍历所有表单元素并在提交表单时启用它们。谢谢!【参考方案2】:

您可以使用readonly 而不是disabled,这对于用户来说几乎是相同的(不能编辑),但是readonly-元素的值会被提交,而disabled 的值不会。

请注意,在 readonly 和 disabled 之间有 some other differences,这可能会给您带来其他问题:

禁用属性

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

只读属性

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

【讨论】:

【参考方案3】:

来回发送相同的数据没有多大意义。

只需留在服务器端,然后在提交时使用它。

另外,假设

用户不能改变/改变他们的价值观。

很傻。

【讨论】:

它是一个表单,我需要根据不同组的用户类型进行一些预定义的选择,因此字段必须可见但未启用。 我不是在谈论客户端的可见性。我说的是服务器端,它已经有了这些值 - sdo,再次发送它们绝对没有意义。关于用户无法更改值的愚蠢假设 我来这里是为了寻找一种将禁用数据发送到服务器的解决方案,而事实上我根本不需要这样做,更简单的解决方案。谢谢 我遇到的问题是表单的一部分应该由 javascript 生成,其值是用户在表单之外选择的值。用户单击“添加到表单”按钮后,选定的值在添加到表单后不应再次更改,但必须提交,因为服务器端必须知道此生成的字段名和值。因此 readonly 是完美的方式!【参考方案4】:

你可以使用“只读”而不是禁用,这应该有想要的效果

您还可以使用 javascript 提交表单,并预先提交取消禁用(启用 :P)各个字段?

【讨论】:

以上是关于禁用表单元素的 POST 值的主要内容,如果未能解决你的问题,请参考以下文章

禁用 div 内的所有表单元素

禁用提交 btn 时,预填充的表单输入元素不接受第一个输入

为啥在提交表单后,来自选择控件的选中元素的值没有出现在 $_POST 数组中? [复制]

几种设置表单元素中文本输入框不可编辑的方法

从克隆表单元素获取所有 POST

表单元素