如何处理HTML表单中的“仅”可见字段?

时间:2009-05-18 01:51:54

标签: php html forms

有没有办法不处理“display:none”风格的字段?这些字段使用javascript动态隐藏,但在PHP中正常处理。

我正在寻找一个PHP解决方案(没有javascript)。

7 个答案:

答案 0 :(得分:6)

根据表单的结构方式,删除隐藏输入的name属性可能是一种可行的方法。在用于隐藏输入的任何Javascript中,添加以下行:

myInputElement.removeAttribute('name');

没有名称的输入不会随表格一起提交。如果您可能需要还原(并再次显示输入),您可能需要考虑将名称存储在可检索的位置:可能在每个元素上使用与name相同的id,或者存储它

到某个地方的元素class属性。


正如Colin所建议的那样,更好的想法是禁用该元素。这与删除其名称具有相同的效果,但是如果需要,它将更容易恢复。

myInputElement.disabled = true;

答案 1 :(得分:2)

我的回忆是,disabled的输入不会在表单数据中提交。因此,当您隐藏字段时,也会设置disabled属性。不需要捣乱名字和ID。

来自W3C:

  

在此示例中,INPUT元素被禁用。因此,它无法接收用户输入,也不会使用表单提交其值。

     

< INPUT disabled name =“fred”value =“stone”>

答案 2 :(得分:1)

您可以使用javascript将隐藏字段中的所有值设置为''。可选地,像jQuery这样的库可以帮助您以更简单的方式根据您的样式(style =“display:none;”)选择字段...

答案 3 :(得分:0)

你可以这样做(使用jQuery作为例子),使用:visible选择器查看哪些表单元素是可见的,然后将可见的元素序列化为表单并提交,或者删除不可见的表单元素。

http://docs.jquery.com/Selectors/visible http://docs.jquery.com/Selectors

http://docs.jquery.com/Ajax/serialize http://docs.jquery.com/Ajax

但是,只要将表单元素变为不可见时使表单元素变为空,然后在服务器端使它们成为可选项,您将更容易实现它。

修改 除非你以这种或那种方式发送指令,否则我无法想到让PHP不处理它们。除了复选框之外,任何具有名称的内容都将被处理,这些复选框由缺少值指示。据我所知,在提交表单时,PHP无法告诉客户端字段的可见状态。

也许您可以将禁用/不可见字段的名称添加到一个额外的隐藏字段,用逗号或其他东西连接,并构建PHP以不处理其中出现的字段。否则你可以操作字段名称以proc_和noproc_或其他东西开始,并将其用作是否处理字段的指令,但是你只是将额外的指令传递给PHP。

答案 4 :(得分:0)

删除各个字段的name属性。 PHP不会处理它们。

答案 5 :(得分:0)

我不确定如果不对Javascript进行至少一些更改,就可以做到这一点。

由于字段隐藏在浏览器中(可能使用CSS),因此无法使用 接收表单的PHP脚本知道哪些是隐藏的(它没有得到 除非javascript有帮助,否则当前的CSS状态。

我建议,如前所述,获取javascript以删除name属性 所以这些字段没有提交。

答案 6 :(得分:0)

PHP无法检测是否隐藏了HTML表单。唯一的方法是: A)用JS取消名称

这样做的问题是,如果你想重新启用表单元素,你就失去了名字,并且必须有一些方法来存储它来替换它。

B)添加一个额外的隐藏字段,说明该字段是隐藏的(再次使用JS) 这将向HTTP POST添加更多数据,这可能被视为一个缺点。另外,你需要安装PHP来检查是否设置了“fieldHidden”$ _POST var。

这样做的一个例子是创建一个名为“HiddenFields [hiddenFieldName]”的隐藏元素,然后使用if array_key_exists和你正在检查的post变量的名称。

这有点啰嗦,但如果你愿意,仍然会让PHP接受变量。

C)将字段设置为只读。 (再次,用JS) 我想这会奏效。但是PHP无法访问它,这可能是一个问题。