首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails,turbolinks和javascript。如何避免出现重复的开关按钮?

Rails,turbolinks和javascript。如何避免出现重复的开关按钮?
EN

Stack Overflow用户
提问于 2020-03-11 19:00:39
回答 2查看 288关注 0票数 0

我正在我的Rails应用程序中实现Switchery按钮,并且Turbolinks处于打开状态。当我导航到另一个页面,然后单击“后退”按钮时,该按钮正在被复制。

以下是我的Javascript代码:

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

Html视图:

代码语言:javascript
复制
<b>Assign as administrator?<span> <%= f.check_box :admin, class:"js-switch" %></span></b>

截图:View

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

EN

回答 2

Stack Overflow用户

发布于 2020-08-17 17:42:20

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

代码语言:javascript
复制
$(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
EN

Stack Overflow用户

发布于 2020-03-11 22:06:19

Multiple calls

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

代码语言:javascript
复制
  var elem = document.querySelector('.js-switch:not([data-switchery])');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60634478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档