【问题标题】:Rails, turbolinks and javascript. How to avoid duplicate Switchery button appear?Rails、turbolinks 和 javascript。如何避免出现重复的 Switchery 按钮?
【发布时间】:2020-03-11 11:00:39
【问题描述】:

我正在我的 Rails 应用程序中实现 Switchery 按钮,并且 Turbolinks 已打开。当我导航到另一个页面,然后单击返回按钮时,按钮被复制。

这是我的 Javascript 代码:

$(document).on('turbolinks:load', function() {
var elem = document.querySelector('.js-switch');
var switchery = new Switchery(elem, {className:"switchery switchery-small"});
});

HTML 视图:

<b>Assign as administrator?<span> <%= f.check_box :admin, class:"js-switch" %></span></b>

截图: View

那么我该如何处理这个问题呢?

【问题讨论】:

    标签: javascript ruby-on-rails turbolinks switchery


    【解决方案1】:

    Multiple calls 防止在同一个元素上调用两次切换,但它对 turbolink 没有帮助。由于页面是从缓存中获取的,所以当它们被添加到 DOM 时,它的点击/更改事件需要重新初始化。我发现的唯一方法是删除现有元素(看起来它们只是视觉元素),然后重新初始化它们。 turbolinks:load 函数变成这样:

    $(document).on('turbolinks:load', function(e) {
      // Delete existing switches if there are any...
      $(".switchery").remove();
      // As we removed all the switchery elements, we need fetch all of them again.
      var els = document.querySelectorAll(".js-switch");
      els.forEach(function(el) {
        new Switchery(el);
      })
    });
    

    【讨论】:

      【解决方案2】:

      Multiple calls

      你可以通过查找data-switchery="true"来过滤掉已经调用过的现有元素。

        var elem = document.querySelector('.js-switch:not([data-switchery])');
      
      

      【讨论】:

      • 您的建议确实可以避免重复按钮,但是,切换按钮已锁定且无法触发。
      • 也许您应该在turbolinks:unload 事件期间从页面中删除切换元素
      • 不幸的是,它仍然是一样的。通过单击链接在页面之间导航时,该按钮很好。单击后退按钮时不会。导航到当前页面时还有其他方法可以触发按钮吗?
      猜你喜欢
      • 2016-09-27
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      相关资源
      最近更新 更多