有没有办法不处理“display:none”风格的字段?这些字段使用javascript动态隐藏,但在PHP中正常处理。
我正在寻找一个PHP解决方案(没有javascript)。
答案 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无法访问它,这可能是一个问题。