【问题标题】:Big issue with chrome, appended dom elements and back behaviorchrome、附加的 dom 元素和后退行为的大问题
【发布时间】:2012-01-01 08:33:26
【问题描述】:

我在一个显然没有解决方案的问题中苦苦挣扎。

我正在为客户编写一个 jQuery 购物车(在此处查看演示:http://thisisnot2.fornacestudio.com/prodotto)。

购物车脚本正在大量操作 dom 元素。 问题是在将订单发布到表单页面后,如果您在 Chrome 中点击浏览器中的后退按钮,脚本将停止工作(例如:类别在被点击后不会显示其内容)。

有人知道是什么原因造成的吗?

谢谢!

【问题讨论】:

  • 您是说点击后退按钮既是正常行为又是预期行为?
  • 你知道错误是什么吗?只是想找到解决办法。
  • Matt:你是说我不应该考虑用户想要回来的可能性吗?杰夫:我不知道是什么导致了错误。糟糕的 js 资源加载将是我的第一个赌注。

标签: javascript jquery dom google-chrome shopping-cart


【解决方案1】:

如果您不知道错误来自suchi-cart.js 中的第351 行

jQuery(this).find(".category-content").modal( ... );

object has no method 'modal' 的形式,我一直不明白为什么,因为我在最初通过硬刷新点击页面以及导航离开并返回时看到页面中包含脚本。


编辑: 在进一步查看脚本后,我注意到您在页面顶部使用了 lazyload 以通过谷歌 https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js 包含 jQuery 1.6.2

然后在您的 head 标签中,您还可以通过以下方式加载 jQuery 1.6.1 的本地副本 <script type='text/javascript' src='http://thisisnot2.fornacestudio.com/wp-includes/js/jquery/jquery.js?ver=1.6.1'></script>

最后,在页面的最底部,您通过以下方式包含您的 simplemodal 脚本 <script type="text/javascript" src="http://thisisnot2.fornacestudio.com/wp-content/themes/notatemplate/cart/jquery.simplemodal.1.4.1.min.js"></script>

我的理论是对页面进行硬刷新,首先加载两个 jQuery 脚本,然后加载 simplemodel 脚本,该脚本当然扩展了它的 .model() 方法,而不是 jQuery 对象。

但是当你离开页面并返回时,通过<script> jQuery 1.6.1 和 simplemodel 插件加载的脚本会立即加载,但是通过 Google 包含的 jQuery 1.6.2 的 LazyLoad 不会通过缓存运行,因为它是脚本,因此在前两个脚本将 jQuery 对象覆盖到 1.6.2 并删除加载到对象中的 simplemodal 脚本之后加载。

所以你需要从你的页面中移除延迟加载 jQuery。

【讨论】:

  • 奇怪的是,firebug 在 Firefox 中没有显示错误,但在 Chrome 中检查我发现它发生在点击时。而且这是回来后才出现的。
  • 感谢您注意到,双重加载是由于我知道已停用的插件。不幸的是,这似乎并没有解决问题。
  • 问题是在lazyload中包含jQuery,当你使用浏览器回来时,所有通过
  • 你是个天才!非常感谢!虽然重新组织站点周围的所有脚本并放弃 LazyLoad 有点困难,但现在它的工作就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多