我试图将我的 javascipt 从它工作的视图页面移到 assets/javascripts 文件中。但是,当我采取行动时,javascript 不再执行。我不知道为什么?
$('.dropbtn').click(function(){
if($(this).hasClass("active") ) {
$(this).parent(".dropdown").find('.dropdown-content').removeClass('show');
$(this).removeClass('active');
}
else{
$('.dropdown-content').removeClass('show');
$(this).parent(".dropdown").find('.dropdown-content').addClass('show');
$(this).addClass('active');
}
});
如果您的 Javascript 文件包含在资产管道中,它将被连接、缩小并预处理为一个大的 .js 文件,默认情况下,该文件包含在您的布局的 .js 文件中<head>
。当浏览器读取此文件时,与.dropbtn
该类关联的 dom 元素尚未加载,因此click
从未添加事件侦听器。
解决方案是将您的代码包装在一个函数中,该函数在文档加载后被调用:
$(document).ready(function(){
// your code goes here.
});
但是,如果您使用 turbolinks(默认包含在 rails 中),则需要使用:
$(document).on('turbolinks:load', function(){
// your code goes here.
});
这样做的原因是,一旦文档被加载,turbolinks 将更新它而不是在每次请求后重新加载它,所以$(document).ready()
只会触发一次,而'turbolinks:load'
每次在您的应用程序中有 turbolinks 加载的内容时都会触发。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句