14

我遇到了一个问题,Turbolinks 在通过浏览器使用后退/前进按钮时会多次绑定事件。我有一个简单的脚本来确保它不是我编写 document.on() 事件的方式,所以......

$(document).on 'page:load', ->
  alert 'Loaded'

单击链接时将触发一次。单击后退或前进(或另一个 Turbolink 链接)将触发两次。下一次它会开火很多次,它会不断增长。这是我在 jQuery 和 Turbolinks 之外的清单文件中唯一的东西。如何防止 Turbolinks 复制事件绑定?

4

4 回答 4

16

问题似乎在于我身体末端的 javascript_tag,而不是头部。在正文中,Javascript 被删除/添加到每个 Turbolinks 页面:更改,因此绑定不断堆积。

于 2013-09-28T04:10:40.353 回答
6

这是有道理的——如果您使用 jquery-turbolinks gem,也会出现同样的问题,因为它会导致 jQuery 文档就绪函数中的任何代码在每次页面加载时运行。因为文档对象从不使用 Turbolinks 重新初始化,这会导致冗余绑定。这种情况的解决方案是将您的 $(document).on 绑定放在 jQuery 就绪函数之外,这样它们就不会在每次页面加载时执行。

于 2013-10-21T16:31:27.757 回答
0

我遇到了同样的问题,基本上我所做的是查询是否在包含 JS 之前定义了变量。听起来有点乱的想法...

于 2014-02-11T23:23:39.030 回答
0

我遇到了同样的问题,问题是我在布局上生成的标记不正确。我body在不应该关闭的地方关闭标签

于 2015-08-06T03:31:45.677 回答