我必须使用香草JavaScript的项目。我有几个功能,其中之一是打开菜单的按钮。它在目标id存在的页面上工作,但在id不存在的页面上导致错误。在那些页面上,函数找不到id,我收到一个“不能读取属性'addEventListener'的空”错误,我的其他函数都不起作用。

下面是打开菜单的按钮的代码。

function swapper() {
toggleClass(document.getElementById('overlay'), 'open');
}

var el = document.getElementById('overlayBtn');
el.addEventListener('click', swapper, false);

var text = document.getElementById('overlayBtn');
text.onclick = function(){
this.innerHTML = (this.innerHTML === "Menu") ? "Close" : "Menu";
return false;
};

我该怎么处理呢?我可能需要将这段代码全部包装在另一个函数中,或者使用if/else语句,以便它只搜索特定页面上的id,但不确定。


当前回答

脚本在主体之前加载,在主体之后保留脚本

其他回答

我认为最简单的方法是加一个'?el前的问号:

 var el = document.getElementById('overlayBtn');
 el?.addEventListener('click', swapper, false);

这是因为在执行bundle js时元素还没有加载。

我将移动<script src="sample.js" type="text/javascript"></script>到index.html文件的底部。这样可以确保在解析和呈现所有html元素之后执行脚本。

这是因为,人们习惯在头部本身定义他们的javascript文件,所以当你在html标签比你的javscript文件首先执行比你的html文件,所以返回的值是NULL。

解决方案:在bodytag '的末尾定义Javascript文件;

我认为最简单的方法是在添加事件监听器之前检查el不为空:

var el = document.getElementById('overlayBtn');
if(el){
  el.addEventListener('click', swapper, false);
}

当我试图通过Id获取一个类的元素时,我遇到了这个问题。检查并确认通过正确的属性(例如id或class)获取元素。否则就会出现这个错误