【问题标题】:jquery 3 document ready is blocking turbolinks from executingjquery 3 document ready 阻止 turbolinks 执行
【发布时间】:2017-09-11 19:44:18
【问题描述】:

到目前为止,我使用的是 jQuery 1.12.4,一切正常,我有这样的东西:

$(document).ready ->

    console.log "document is ready yaay!"

    start = ->

        alert "Hello world!!!"

    document.addEventListener('turbolinks:load', start)

我昨天升级到 Rails 5.1 并决定添加和升级我的 jQuery(是的,我仍然需要它)所以我使用 yarn 安装了 jQuery 3,但是上面相同的代码没有被执行,至少 turbolinks 部分(console.log 每次文档加载时都会执行,但“start”方法不会)

我删除了$(document).ready ->,代码开始按预期工作!!!

为了确保我还删除了 jQuery 3 并重新安装了 jQuery 1.12 并且它工作正常!即使$(document).ready ->

为什么会这样?

【问题讨论】:

    标签: javascript jquery ruby-on-rails turbolinks-5


    【解决方案1】:

    确保将//= require jquery 添加到application.js 文件中。

    在命令行中,运行yarn install jquery全部小写

    这是我的 application.js 文件,来自我的一个项目,通过 yarn 使用 jquery。

    //= require rails-ujs
    //= require turbolinks
    //= require jquery
    //= require_tree .
    

    编辑: 如果您希望在每次页面更改时触发 console.log 和 alert。你可以这样写你的javascript。

    $(document).on('turbolinks:load', function() {
      console.log('Test');
      alert("Hello world!!!");
    });
    

    【讨论】:

    • 我没有关于添加 jquery 的问题,我的 application.js 中已经有它,问题在于 jquery 版本,如果您使用 jquery 3 并运行我的代码,它只会调用 turbolinks 方法一次,之后如果您进行多次刷新,turbolinks 方法将停止工作
    • jQuery 就绪事件或此$(document).ready -> 与 turbolink 冲突。我认为可能存在一些命名空间问题,其中 turbolink 被 jquery 覆盖,反之亦然。也许 v1.12.4 有效,因为与 turbolink 的重叠并没有那么糟糕。你可以在这里github.com/turbolinks/…thoughtbot.com/upcase/videos/turbolinks阅读更多信息
    • 我想是的,这很奇怪,实际上不使用 $(document).ready 是 jQuery 3 的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多