【问题标题】:Back button bug in Chrome/SafariChrome/Safari 中的后退按钮错误
【发布时间】:2011-06-17 10:28:31
【问题描述】:

我一直在尝试找到解决 Safari/Chrome 中后退按钮错误的解决方法(浏览器将虚假数据放在不属于它们的字段中)。我没有运气,现在看来应该有一个很好的解决方案(我看到关于这个问题的帖子可以追溯到 2009 年,但没有很好的解决方案)。

在本例中:http://jsfiddle.net/eGutT/13/

您可以看到在初始页面加载时一切正常。但是,在单击链接后,然后单击浏览器上的后退按钮,值会传播到错误的字段。请使用 Safari 或 Chrome 进行测试。它在 Firefox 上运行良好。

这是一个非常严重的问题,尤其是在:

  1. 用户点击返回按钮,出现此错误
  2. 用户没有注意到虚假数据
  3. 用户对表单进行了一些不相关的更改(在不同的未受影响的字段中)
  4. 用户提交表单

现在您面临的情况是虚假数据被提交到数据库!

顺便说一句,这个问题可能与 jQuery 有关,因为如果您在示例中取消注释此行:

updateRowNums();  // IF YOU COMMENT OUT THIS LINE...

不会引入额外/虚假数据。

谢谢, 盖伦

【问题讨论】:

  • 谢谢,您已经解决了其他帖子中的问题。尽管具有 name 属性是一种解决方法,但它仍然是一个 webkit 错误。换句话说,如果 webkit 不确定要填充的字段,它不应该随意选择一个:)
  • 以防万一用户今天仍然遇到这个问题:了解 bfcache(例如通过this blog post)并查看here 如何挂钩一些代码以进行整理前一页状态。

标签: javascript jquery google-chrome safari back


【解决方案1】:

您是在谈论 0、1 和 2 吗?因为您的函数 updateRowNums 会自动强制这些值。如果您想保留第一列,可以将updateRowNums 更改为如下内容:

if (!$('#some_id').val()) { $('#some_id').val(x); }

(显然这不是最有效的代码,但如果不存在值,它会重置字段。)

但是,如果不是您在说什么,那么我无法重现您的问题。我使用的是 Chrome 9.0.597.83,它在所有正确的位置保存了所有正确的数据。

【讨论】:

  • 嗯,我在 Mac 上使用的是完全相同的 Chrome 版本。问题不在于我不想设置一个已经设置的值(就像你建议的那样)。问题是当您返回该页面时,其他不相关的字段(具有完全不同的 ID)会采用其他字段的值。正如我所发现的,这实际上与 jQuery 无关。这个例子没有使用jQuery,有问题:jsfiddle.net/rwaldron/UvmDv/7
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 2010-09-06
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多