美文网首页
turbolinks导致js代码只能运行一次的解决办法

turbolinks导致js代码只能运行一次的解决办法

作者: 苑畅 | 来源:发表于2019-07-25 10:22 被阅读0次

    本站使用的是Rails框架开发的,并且有第三方的js. 其中有一个回到顶部的功能,部署时发现回到顶部的按钮只能成功运行一次,当浏览到其他页面后立即失效.本能反应应该是turbolinks的坑.

    首先想到的是禁用turbolinks

    在application.js 中删去

    //= require turbolinks
    

    然后在apploication.html.erb中删去

    'data-turbolinks-track': 'reload'
    

    问题完美解决.

    但从另一方面来考虑,既然Rails中引入turbolinks,是为了加快页面的打开速度,如果直接弃用岂不是很可惜

    于是去turbolinks的github看文档

    turbolinks

    turbolinks用

    document.addEventListener("turbolinks:load", function() {
    
    })
    

    替换了JQuery中的

    $(document).ready(function(){
    
    })
    

    因此只需要把第三方js的回到顶部的功能拎出来这样写即可

    turbolinks-load

    这样问题也解决了

    仔细分析了一下这个问题的原因

    1. $(document).ready 依赖于 DOMContentLoaded 事件

    2. Turbolinks 接管页面后换页不会产生 DOMContentLoaded,所以换页之后 $(document).ready 无效

    3. Turbolinks 提供了 turbolinks:load 取代 $(document).ready

    相关文章

      网友评论

          本文标题:turbolinks导致js代码只能运行一次的解决办法

          本文链接:https://www.haomeiwen.com/subject/cuycrctx.html