【问题标题】:Validation and Firefox's input caching验证和 Firefox 的输入缓存
【发布时间】:2026-01-19 23:35:01
【问题描述】:

当您刷新/重新加载页面或使用后退按钮时,Firefox 会很好地使用您离开之前输入的内容重新填充您的输入。

虽然这是一个不错的功能,但它不会触发我的 jquery 验证和我添加到页面的未保存更改警告。

有没有办法在 Firefox 中禁用此功能(无需每次都重命名每个控件)或捕获 firefox 事件?

【问题讨论】:

    标签: jquery firefox


    【解决方案1】:

    在您的.validate() 调用document.ready 之后,还调用.valid() 一次以触发验证,如下所示:

    $(function() {
      $('#myForm').validate({ /* options here */ });
      $('#myForm').valid();
    });
    

    【讨论】:

    • 这确实适用于验证(谢谢),但它只告诉我页面无效而不是某些内容发生了变化。我需要这个来通知用户有未保存的更改并警告导航离开。有什么方法可以告诉您正在显示的内容不是从服务器中提取的内容?
    • @Chris - 你想让他们缓存输入吗?听起来您可能想要阻止页面一起缓存...如果是这种情况,请发布您正在使用的服务器端框架,因为答案会有所不同。
    • @Nick - 我可以看到缓存的输入是如何有用的,但最简单的行为是无缓存选项。但是,我知道在 Firefox 中禁用此行为很困难?因此,我正在研究如何使用它。
    • @Chris - 在每个浏览器中都非常简单,您使用的是什么服务器平台?所有当前的浏览器(甚至 IE6)都将尊重无缓存标头,所以我肯定会选择该选项。
    • 这将是 IIS6 和 IIS7。最好将这些标头放在 IIS 中、响应中还是作为页面上的元标记?
    【解决方案2】:

    您可以使用trigger() 方法触发任何事件(自定义或非自定义)。

    假设你有一个验证事件:

    $(document).ready(function()
        {
            $('#yourform').trigger('validate');
        }
    );
    

    如果您的验证插件使用函数进行验证,那么只需执行以下操作:

    $(document).ready(function()
        {
              validate($('#yourform'));
        }
    );
    

    当您的文档准备好时触发。

    最终使用 setTimeout 来避免在浏览器加载缓存输入值的过程中的加载时间。

    【讨论】:

    • 我正在使用 jquery validate 插件,并且我已经在准备好文档中进行验证调用。我不相信 Firefox 会触发使验证运行的事件。就好像 Firefox 正在覆盖默认值一样
    • 使用 console.log($('#youform input').val()) 查看您的代码检索了哪些值。
    【解决方案3】:

    我是否可以建议您添加一个延迟功能以在页面加载几秒钟后验证和检查表单内容?这可能是捕获所有浏览器的最安全方法,其中一些浏览器仅在整个页面完成加载后才插入保存的表单数据。

    【讨论】:

    • 延迟检查将是我最后的手段。往下走是一条危险的路。另外,如果 firefox 没有触发 changed 事件,我怎么知道发生了什么变化?