【问题标题】:Firefox keeps form data on reloadFirefox 在重新加载时保留表单数据
【发布时间】:2011-09-11 09:10:58
【问题描述】:

我在 Firefox 中保留用户在重新加载时填写的数据的功能存在一个大问题 F5。如果我使用 Ctrl+F5 表格将被清除,这很棒。我的问题是,并非所有用户都知道这是他们必须执行的强制输入清理操作。有没有办法在 html 或响应标头中告诉 Firefox 不要将数据保留在表单中?

【问题讨论】:

  • 制作一个清除表单的按钮怎么样?这对用户来说似乎更容易理解,然后让他们推动 f5
  • 这是一个想法,但我不想打扰我的用户。
  • 大多数用户希望在重新加载时保留表单数据...
  • 我的问题是我的许多输入都是经过计算的,如果不是所有内容都被重置,那么在重新加载时数据会变得不一致。
  • 您还可以在回发时重新计算所有内容。

标签: forms firefox caching


【解决方案1】:

只需将autocomplete="off" 添加到您的输入中即可解决问题。

<input type="text" autocomplete="off">

jQuery 在所有输入和文本区域上解决这个问题

$('input,textarea').attr('autocomplete', 'off');

【讨论】:

  • 相反,您可以添加
    以完全禁用此表单缓存
  • 不幸的是,这也删除了自动完成功能,只需单击表单元素(它会显示先前输入值的下拉列表)
  • 但是此解决方案不适用于通过按 F5 按钮或 firefox 浏览器重新加载按钮重新加载的页面。
  • 我花了半天时间才知道这是firefox的麻烦。感谢您的解决方案。
  • 隐藏字段呢? Firefox 也在保留它们
【解决方案2】:

您也可以像这样将属性添加到表单元素,而不是遍历所有输入:

&lt;form method="post" autocomplete="off"&gt;...&lt;/form&gt;

但是上面提到的关于 domReady 的方法对我不起作用...

【讨论】:

  • 这个压迫性的 Firefox 功能的最佳解决方案。应小心使用;可能需要一些其他方法来避免无意中丢失用户数据。
  • 是的,非常好的解决方案,谢谢 MOZILLA... 现在我只需要更新 8564 个不同的页面和脚本,重新上传它们,然后重新测试整个后端。真的很方便。
【解决方案3】:

如果您想保留浏览器的自动完成功能(请参阅其他有效答案),请尝试将 name 属性添加到表单并给它一个随机值。它对我有用:

<form id="my-form" name="<random-hash>">
...
</form>

【讨论】:

  • 这是个好主意,我希望他们不要绕过它。它削减了中间,妥协明智。
  • 您必须能够在运行时将唯一字符串放入,但如果可以的话,这似乎可行!
  • 这可能是真的。我只是用服务器呈现的表单试了一下。
【解决方案4】:

我认为更简单快捷的方法是

$('input,textarea').attr('autocomplete', 'off');

【讨论】:

  • no.using jquery ,它不工作。我认为如果 jquery 代码在浏览器自动完成之前执行,自动完成关闭将起作用!!!!
【解决方案5】:
/*reset form elements (firefox saves it)*/

function resetElements()
{
     var inputs = document.querySelectorAll('input[type=text]');
     //you get the idea.....you can retrieve all inputs by tag name input
     for(var i = 0; i < inputs.length; i++) {
         document.getElementsByTagName('input')[i].value = "";
     }
     var textareas = document.getElementsByTagName('textarea');
     for(var i = 0; i < textareas.length; i++) {
         document.getElementsByTagName('textarea')[i].value = "";
     }
}

调用这个函数onload。

【讨论】:

  • 我喜欢 Javascript 解决方案的一点是,输入建议继续有效,只有输入字段值被删除,而 autocomplete="off" 也禁用建议。
【解决方案6】:

我尝试了上面的缩短解决方案,但它没有清除我页面上选择框的值。

最后我稍微修改了一下,现在页面上的所有输入类型都被清除了,无论类型如何:

var allInputs = $(":input");
$(allInputs).attr('autocomplete', 'off');

所以为了让这个 onload 运行,我只是把它放在 ready() 方法中:

$(document).ready(function () {
    var allInputs = $(":input");
    $(allInputs).attr('autocomplete', 'off');
});

【讨论】:

  • 回复:“...上面...”,请注意答案是可排序的,并且会根据投票等重新排序。
【解决方案7】:

我发现对我来说唯一的解决办法就是这样做

document.forms[0].reset();

在页面早期准备好文档之前,正如上面@Marek 的评论中所建议的那样 - 不是很好但对我有用(通过 jQuery、JS 或 HTML 的自动完成属性方法最终没有为我修复它)

【讨论】:

  • 正是我正在寻找的,谢谢!
【解决方案8】:

只是为了搭载@jonnybradley 的解决方案(无法评论他的回答,因为我还没有足够的代表):

这对我来说也很有效:

document.getElementById('theFormId').reset();

在 HTML 代码之后调用。

【讨论】:

    【解决方案9】:

    我的一位同事建议我们应该使用随机字符串作为表单的名称。如果不使用表单的name 属性,它会很好地工作。

    这是来自 sf1 表单构建器的示例:

    public function renderFormTag($url, array $attributes = [])
    {
        ..
        $attributes['name'] = isset($attributes['name']) ? $attributes['name'] : bin2hex(random_bytes(16));
        ..
    }
    

    【讨论】:

      【解决方案10】:

      隐藏输入字段也需要autocomplete="off",以便在简单的页面重新加载 (F5) 时刷新它们

      【讨论】:

        猜你喜欢
        • 2012-05-14
        • 2011-07-06
        • 2022-07-02
        • 2015-10-13
        • 2018-11-14
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多