Javascript getElementByClassName不是';行不通

Javascript getElementByClassName不是';行不通,javascript,getelementsbyclassname,Javascript,Getelementsbyclassname,我有一个问题,为什么我不想工作累了一段时间。我刚开始学习js。非常感谢你的帮助 var test=document.getElementsByClassName(“test”); test.onclick=函数(){ 警报(“测试”); }; 我不是javascript开发人员,但我认为应该是 var test = document.getElementsByClassName("test")[0]; test.onclick = function (){ alert("test")

我有一个问题,为什么我不想工作累了一段时间。我刚开始学习js。非常感谢你的帮助


var test=document.getElementsByClassName(“test”);
test.onclick=函数(){
警报(“测试”);
};

我不是javascript开发人员,但我认为应该是

var test = document.getElementsByClassName("test")[0];
test.onclick = function (){
    alert("test");
};
as
document.getElementsByCassName
返回一个列表

document.getElementsByClassName("test"); 
返回一个数组。
您必须循环该数组,并将onclick应用于每个元素。

您需要将eventlistener添加到每个元素。因此,您需要遍历元素,因为
document.getElementsByClassName()
返回一个元素数组。您可以这样做:

函数触发器(){
警报(“测试”);
}
var test=document.getElementsByClassName(“test”);
对于(变量i=0,j=test.length;i

如前面的答案所述,方法
document.getElementsByClassName
返回一个节点列表对象,该对象是具有数字索引(0,1…)的类似数组的对象,您可以使用
for.对其进行循环。。在
循环或
Array.prototype.forEach.call方法中,可以将事件侦听器附加到每个节点

var tests = document.getElementsByClassName("test");
var node;
for (node in tests) {
  node.addEventListener("click", function(e){
        // do something
   });
}
或以以下方式:

    var tests = document.getElementsByClassName("test");
    Array.prototype.forEach.call(tests, function(node){
      node.addEventListener("click", function(e){
            // do something
      });
   });

要点是你必须向每个元素添加事件监听器。

可能的重复我看不到你的jQuery脚本插入到任何地方,还有
script.js
文件中的内容?@ZombieChowder示例中的代码是香草javascript,jQuery不是必需的。@JohnC-huh是的,我猜它正好从我身边经过。它返回一个类似于live的数组,而不是数组:)好的,对不起,但至少你可以循环使用它:)在大多数浏览器中,它实际上返回一个类似于HTMLCollection对象的NodeList对象。@asmmahmud不,它没有。“new”
.querySelector*
方法返回s@Andreas根据W3School,它返回一个NodeList对象。但是,根据>Mozilla开发者网络,它返回一个HTMlCollection。哪一个是正确的?