Javascript 香草js是';你不在我的rails应用程序上工作吗?
我试图实现一个全屏菜单,我没有得到任何rails错误,但当我运行项目时,它根本不工作。我在检查元素时出现此错误:Javascript 香草js是';你不在我的rails应用程序上工作吗?,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我试图实现一个全屏菜单,我没有得到任何rails错误,但当我运行项目时,它根本不工作。我在检查元素时出现此错误: Cannot read property 'addEventListener' of null 这是我的js: (function() { var Menu = (function() { var burger = document.querySelector('.burger'); var menu = document.querySelector('.me
Cannot read property 'addEventListener' of null
这是我的js:
(function() {
var Menu = (function() {
var burger = document.querySelector('.burger');
var menu = document.querySelector('.menu');
var menuList = document.querySelector('.menu__list');
var brand = document.querySelector('.menu__brand');
var menuItems = document.querySelectorAll('.menu__item');
var active = false;
var toggleMenu = function() {
if (!active) {
menu.classList.add('menu--active');
menuList.classList.add('menu__list--active');
brand.classList.add('menu__brand--active');
burger.classList.add('burger--close');
for (var i = 0, ii = menuItems.length; i < ii; i++) {
menuItems[i].classList.add('menu__item--active');
}
active = true;
} else {
menu.classList.remove('menu--active');
menuList.classList.remove('menu__list--active');
brand.classList.remove('menu__brand--active');
burger.classList.remove('burger--close');
for (var i = 0, ii = menuItems.length; i < ii; i++) {
menuItems[i].classList.remove('menu__item--active');
}
active = false;
}
};
var bindActions = function() {
**burger.addEventListener('click', toggleMenu, false);**
};
var init = function() {
bindActions();
};
return {
init: init
};
}());
Menu.init();
}());
(函数(){
变量菜单=(函数(){
var burger=document.querySelector('.burger');
var menu=document.querySelector('.menu');
var menuList=document.querySelector('.menu\u list');
var brand=document.querySelector(“.menu__品牌”);
var menuItems=document.querySelectorAll('.menu__项');
var-active=false;
var toggleMenu=函数(){
如果(!活动){
menu.classList.add('menu--active');
menuList.classList.add('menu\u list--active');
brand.classList.add('menu_ubrand--active');
burger.classList.add('burger--close');
对于(变量i=0,ii=menuItems.length;i
这是我第一次使用vanilla——在rails中使用vanilla是否缺少额外的步骤?(通过“require”或其他方式?还是内置?谢谢
我的html:
<!DOCTYPE html>
<head>
<title>AaP</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<div class="header">
<h1>ASHLEIGH</font> <font color=#f6f6f6>/</font> <font color=#fbe2d4>ALMEIDA</font></h1>
<div class="burger">
<div class="burger__patty"></div>
<div class="burger__patty"></div>
<div class="burger__patty"></div>
</div>
<nav class="menu">
<div class="menu__brand">x
<a href=""><div class="logo"></div></a>
</div>
<ul class="menu__list">
<li class="menu__item"><a href="" class="menu__link">About</a></li>
<li class="menu__item"><a href="" class="menu__link">Work</a></li>
<li class="menu__item"><a href="" class="menu__link">Contact</a></li>
<li class="menu__item">
x</i></a>
</li>
<li class="menu__item">
x
<i class="fa fa-dribbble"></i></a>
</li>
</ul>
</nav>
</div>
AaP
正确%>
正确%>
阿什利/阿尔梅达
x
-
x
-
x
出现错误的原因是在加载和解析DOM之前执行了脚本。因此,此时没有“burger”div
使用DOMContentLoaded处理程序包装代码,
从我能看出的情况来看,burger是空的。这会让我认为您的Javascript是在加载DOM之前执行的 如果我是正确的,为了解决这个问题,你必须查看加载的顺序
所以我想说,移动
下的
行并查看是否有效。控制台中是否有错误?是否有任何类为“burger”的HTML元素?“未捕获的TypeError:无法读取null的属性'addEventListener':)@PavelGatnar-是的,DOM准备好后是否运行JS?好的,因此我将代码添加到JS文件的顶部,现在我得到:Uncaught TypeError:无法读取null应用程序的属性“addEventListener”。self-40b20bf8c64be14ddd15703a095a78137b6078d743ab579da88d8b157be541f6.js:19 DOM已完全加载并解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%= content_for?(:title) ? yield(:title) : "Example" %></title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "vendor/modernizr" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= render "static_pages/header" %>
<%= yield %>
<%= javascript_include_tag "application" %>
</body>
</html>