我现在很生气。我损失了几个小时,我不知道为什么会发生这种情况。这是半咆哮,但我会尽量保持简短
- 我的代码无法工作,即使刷新后它也被破坏了
- 我修复了我的代码,或者我想是因为如果我不改变任何东西它就会停止工作(你会认为我在想象这个......)
- 我以某种方式决定创建一个新窗口或选项卡,运行我的代码并验证它是否有效。
- 我编写了更多代码,发现一切又都被破坏了
- 我在新窗口中编写测试,并看到我的代码确实有效
- 我发现我的代码不起作用,并且 firebug 没有帮助
- 我注意到当我创建一个新标签时一切正常
- 我意识到刷新不起作用,我必须创建一个新选项卡才能使我的代码正常工作。
然后我立刻就知道问题是什么了。我修改了显示:无文本框,但我设置的值不正确。我看不到它,因为它被隐藏了。现在,你们中的一些人可能会说这是我的错,因为刷新时所有数据可能都会被缓存。但这是最关键的。我正在使用 POST 数据。我在每次刷新之间发布。
当相同的数据被缓存并仍然使用时,使用 POST 有什么意义?如果搜索引擎没有机会跟踪阻止用户
获取链接,那么当安全或重复操作不是问题时,我为什么要费心发布任何内容呢? POST 似乎没有做任何事情。
最佳答案
听起来您似乎受到了表单字段值内存的打击。
当您使用后退和前进时(但在具有 bfcache 的浏览器中未使用 bfcache 时),或者在某些浏览器中,当您点击重新加载时,浏览器会尝试保留在页面上次卸载。此功能旨在允许用户导航和刷新表单,而不会丢失他们费力输入的所有数据。
因此,您不能依赖表单字段的值在页面加载时与它看起来应该来自 HTML 源的值相同。如果您的 DOM 状态取决于表单字段的值(例如,某些字段根据另一个字段的值隐藏或禁用的表单),则必须在页面加载时更新该状态以反射(reflect)浏览器已静默放置到位的字段值(不会发生 onchange
事件)。并且根本不要使用隐藏输入来存储脚本变量。
确切的行为因浏览器而异。例如,有些浏览器保留隐藏字段的值,有些则不保留。 Mozilla 和 WebKit 在字段被解析到 DOM 时立即将新值放入其中,而 IE 仅在 window.onload
上执行此操作...而 Opera 则在 window.onload 之后执行此操作.onload
,因此只能通过在onload
之后设置0超时来更新状态来捕获它。这是一团糟。
关于javascript - 为什么 Firefox + 我的代码会破坏 FireFox 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943290/