【问题标题】:Javascript DOM events before and after Turbolinks cacheTurbolinks 缓存前后的 Javascript DOM 事件
【发布时间】:2018-04-03 13:26:51
【问题描述】:

这里有:

$(document).on 'turbolinks:load', ->
  console.log "page has loaded!"
  $ ->
    $("button#show-hide").click (e) ->
      e.preventDefault()

这使得我的click 事件仅在 Turbolinks 缓存页面后可用。我可以做$(document).on 'turbolinks:before-visit,这将使事件仅在 Turbolinks 缓存之前可用。我应该如何让活动始终可用?

【问题讨论】:

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


    【解决方案1】:

    我认为这里的问题是您绑定到两个事件:turbolinks:load$(document).ready()

    Turbolinks 不会丢弃 document 上的事件侦听器,因此您可以安全地将点击处理程序绑定到它,它们将被称为跨页面加载。来自 Turbolinks 文档:

    如果可能,请避免使用 turbolinks:load 事件将事件侦听器直接添加到页面正文上的元素。相反,请考虑使用事件委托在文档或窗口上注册一次事件侦听器。

    考虑到这一点,您可以这样做:

    $(document).on 'click', "button#show-hide", (e) ->
      e.preventDefault()
    

    【讨论】:

      【解决方案2】:

      您只需将点击事件从 'turbolinks:load' 和

      'turbolinks:before-visit' 上下文。

      或者如果按钮是在 DOM 中动态添加的,您可以做的是将单击处理程序附加到正文,然后单击确定单击了哪个元素并相应地继续。

      $('body').on('click','button#show-hide',function(){
      
      });
      

      在咖啡脚本中,你可以这样做

      $('body').on('click', 'button#show-hide', ( ->
      
      ));
      

      更新

      来自Rails, javascript not loading after clicking through link_to helper的回答

      如果您希望您的点击处理程序在 page:changeready 事件上工作,您可以这样做,

      var ready = function() {
          // bind click handlers to DOM elements here
      };
      
      $(document).ready(ready);
      $(document).on('page:change', ready);
      

      【讨论】:

      • 来自 application.js - //= require turbolinks //= require_tree . 我认为正因为如此(首先加载涡轮链接),除非重新加载页面,否则我绑定到 DOM 元素的 Js 文件不起作用
      • ready 仅在响应初始页面加载时触发 - 而不是在任何后续页面更改后触发。所以 AFAIK,就我而言,它与我之前尝试过的 load 相同。但是感谢您的努力
      • 答案中还有page:change事件,ready和page:change事件都调用了ready函数。
      • 不,我认为问题在于您无法从 Js/coffee 文件中绑定到 DOM 事件,如果 Turbolinks 进行缓存,那么很容易
      猜你喜欢
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2022-11-23
      • 1970-01-01
      • 2016-03-26
      • 2019-10-05
      相关资源
      最近更新 更多