Firefox缓存隐藏输入

18

我在表单中有一个隐藏的输入字段。 我注意到,如果该字段的值由JavaScript更改,然后用户刷新页面,当页面重新加载时将设置相同的值。 根据我所看到的,这只发生在Firefox中。

我通过在那个隐藏的输入中添加autocomplete="off"来解决这种不希望出现的行为,但是W3C不喜欢这个解决方案,如果我验证页面,我会得到错误:

Attribute autocomplete not allowed on element input at this point.

显然,autocomplete属性只对特定的输入框起作用-在这里查看

那么有没有解决方案可以同时满足 W3C Firefox


“autocomplete” 标签仅适用于 HTML5,因此我将 HTML5 标签添加到问题中。 - jmlnik
防止Firefox使用meta标签刷新时记住输入值 - user123444555621
@Pumbaa80,tamir已经尝试使用autocomplete="off",但根据规范,这不适用于<input type="hidden">。您是在建议缓存标签/头可以防止Firefox自动填充表单吗? - jmlnik
值得注意的是,Chrome似乎表现出相同的行为。 - David Stone
2个回答

13

为了验证表单输入(我不会像你这样付出太多的努力),我认为你可以在整个表单上使用autocomplete =“off”,然后有选择地将其打开,例如:

<!DOCTYPE html>
<html>
<head>
    <title>TEST</title>
</head>
<body>
    <form autocomplete="off">
        <input type="hidden" name="test">
        <input type="text" name="otherfield" autocomplete="on">
    </form>
</body>
</html>

一开始我以为这是Firefox的一个bug,但在与评论区中的robertc讨论后,我认为预期行为取决于具体的使用情况。规范不允许在隐藏字段上自动完成,因此我的第一反应仍然正确,但Firefox的实现可能有一些支持它的好理由。请留言。


1
Firefox会在重新加载(前进和后退)时缓存所有表单字段的状态,这不是坏事,而是一项功能。 - robertc
2
@robertc,缓存用户可编辑的字段是好的,但缓存隐藏字段?!这有什么用或特点吗?我认为FF团队只是没有考虑到这种情况,并且没有正确实现规范。 - jmlnik
1
如果您要保留表单的状态,那么仅保存可见字段有什么意义呢?用户不小心按了后退按钮(或者是退格键等),再次前进并提交表单时,发现由于某些隐藏值未被缓存,表单无法提交。 - robertc
1
那么为什么不利用它来设置 JavaScript,在页面加载时将所选选项设置为隐藏字段所述的内容呢?这样,如果我选择“WordPress”并重新加载,则仍然被选中! :) - jmlnik
1
我注意到的一件事是,autocomplete="off"采取了另一个极端,当您双击表单时不会提供先前输入值的下拉列表。如果有一个折中方案就好了。 - AntiElephant
显示剩余4条评论

4

或者,您可以使用<input type="text" style="display: none;" autocomplete="off" />。这有点像黑客技巧,但应该有效!

Firefox中的缓存实际上是一个非常好的功能,但在构建更动态的表单时会导致一些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接