Javascript:如何在CMS的主体中添加事件侦听器,并在头中添加JS代码

Javascript:如何在CMS的主体中添加事件侦听器,并在头中添加JS代码,javascript,wordpress,onclick,content-management-system,event-listener,Javascript,Wordpress,Onclick,Content Management System,Event Listener,我编写了一个脚本,为onClick事件将侦听器添加到。单击时,它会在文档中搜索具有特定类someclass的任何元素,然后对其执行一些操作等 问题是,在找到class=someclass的所有元素之后,class=someclass的所有元素的数组都是空的。我认为这是因为添加监听器的JS代码在头文件中,当它运行时,来自CMS的另一个php文件(包含实际的监听器)的主体尚未加载 我该怎么办 顺便说一句,我正试图使用纯JS来实现这一点。除了一个外部.js文件之外,我不想要任何东西。这意味着没有jqu

我编写了一个脚本,为onClick事件将侦听器添加到。单击时,它会在文档中搜索具有特定类someclass的任何元素,然后对其执行一些操作等

问题是,在找到class=someclass的所有元素之后,class=someclass的所有元素的数组都是空的。我认为这是因为添加监听器的JS代码在头文件中,当它运行时,来自CMS的另一个php文件(包含实际的监听器)的主体尚未加载

我该怎么办

顺便说一句,我正试图使用纯JS来实现这一点。除了一个外部.js文件之外,我不想要任何东西。这意味着没有jquery或其他API,也没有编辑html


我的选择是什么?感谢阅读。

理想情况下,您应该将JS移动到结束正文标记之前。如果不可能,则需要使用文档对象的DOMContentLoaded事件或窗口对象的load事件

你的问题是你的页面还没有准备好,所以你的JS代码还没有任何东西可以访问。更多信息请点击此处:

DOMContentLoaded适用于现代浏览器和IE9+:

Load可在所有浏览器中工作:


你能发布到目前为止的javascript吗?有没有理由把它加到头上而不是身体上?为什么不使用wordpress的页脚方法将其注入到身体底部呢?是的,马上就来。我希望这一切最终都在一个.js文件中,并且完全不引人注目。下面是标题中的代码。底部函数仅为window.onload事件调用多个函数。最上面的函数就是这个问题:var cmarray=document.getElementsByClassName'commentsection';似乎正在返回null。我认为,因为主体在被调用时没有加载,整个过程是基本的单击按钮/div,另一个div更改类,css将其显示为:none;,它会将按钮的内容更新为“显示”或“隐藏”。这是一个JSFIDLE模型:给你:但是我使用window.onload来加载这两个函数,它仍然抛出数组为null的错误。你能展示数组为null的示例代码吗?另外,您正在使用哪个浏览器进行测试?Uncaught TypeError:无法读取null Google的属性'addEventListener',这让我相信这是因为其中一个函数找到的标记在函数运行时没有被CMS加载。您如何检索调用addEventListener的元素?你能把全部代码都显示出来吗?它在这里,下面是它的调用方式:函数addcsbuttonlistener{document.getElementByIdcomment-hide-button.addEventListenerclick,hidecommentsect;}
document.addEventListener('DOMContentLoaded', function(event) {
  console.log('DOM fully loaded and parsed');
});
window.onload = function() {
  console.log('The load event fires at the end of the document loading process. At this point, all of the objects in the document are in the DOM, and all the images, scripts, links and sub-frames have finished loading.');
};