为什么Firefox从HTML表单中删除/忽略隐藏的输入值?

时间:2015-07-18 20:22:25

标签: php html forms firefox hidden-field

我有一个HTML表单,它使用隐藏的输入来管理PHP处理脚本中的行为。

在浏览器测试中,我发现该表单在Chrome和IE中运行良好,但Firefox存在问题。

Firefox浏览器(使用39.0)删除隐藏的输入值。他们只是完全消失,只留下value=""。这反过来会弄乱我的PHP。

我已经广泛搜索有关此问题的信息,但一无所获。

为什么Firefox会在我的HTML表单中删除(或忽略)隐藏的输入值?

在原始文件中 enter image description here

在Chrome开发者工具中 enter image description here

在Firefox Inspector中 enter image description here

更新(根据发布的评论)

浏览器测试。该表单已经过所有主要浏览器的桌面和移动版本测试。该表单适用于所有浏览器(包括Firefox移动版),但无法在Firefox桌面(39.0)中完全运行,因为隐藏的输入值已被删除。

更新2

重新启动并重新安装Firefox无法解决问题。

更新3

删除了所有客户端脚本并检查了HTML验证(没有错误)。问题依然存在。

更新4

这似乎是与Firefox缓存数据和处理POST请求的方式有关的问题。

当我“清除所有历史记录”(包括Cookie,缓存等)时,表单按预期工作... ONCE。

在所有后续提交中,value属性都有一个空值,并且没有数据传递给PHP,直到我再次“清除所有历史记录”。

在其他浏览器中不会发生这种情况。

1 个答案:

答案 0 :(得分:1)

我有完全一样的问题。没有使用客户端脚本。我将隐藏字段嵌套在div中,然后一切正常。

这有效:

<div>
<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">
</div>

复制了帖子中描述的确切行为:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">

以上两种变体均适用于Chrome。该问题仅出现在台式机Firefox 63.0.1(64位)上。

更新(2018-11-15)实际上,就我而言,问题是HTML格式不正确(name属性前没有空格)。 Chrome似乎对此宽容,而Firefox对此却不太宽容。 Firefox会一次提交该值,除非清除了缓存,否则不会再次提交。纠正HTML可以纠正Firefox出现的这种奇怪行为。更正的HTML:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>" name="_token">