具有函数参数的Javascript事件监听器,

时间:2018-04-04 17:43:46

标签: javascript html javascript-events

首先,我已经阅读过类似的问题,最重要的是这个问题: JavaScript click event listener on class
但是,我的初始代码看起来更像是该问题的解决方案,区别在于我的函数需要一个参数。
基本上我有一个按钮的程序,点击时显示内容,可以使用javascript嵌套,这是通过几个按钮完成的,每个按钮都有各自的div和一个onclick属性,在所述div上切换一个类(可能不是最好的方法这样做,直到我使用addEventlistener而不是onclick属性,这工作得很好,如下所示:

var buttons = document.getElementsByClassName('nested-button');
var divs = document.getElementsByClassName('nested-div')
function myFunction(id) {
   document.getElementById(id).classList.toggle("show");
}
for (var i = 0;i<buttons.length;i++){
   buttons[i].addEventListener("click", myFunction(divs[i].id),false);
}

FIrst(使用上面看到的代码),控制台说它无法读取未定义的属性id,但是,我通过在for循环中创建具有相同值的var来解决这个问题,然后将该var用作参数,结果是,并非非常令人惊讶的是,所有切换的按钮都显示在最后一个div上,所以为了解决这个问题,我想输入一个刚刚创建的函数,用该函数执行myFunction就足够了,因为函数将alwa使用id最初使用而不是var的值,然而,没有改变任何东西:

for (var i = 0;i<buttons.length;i++){
   var currentDiv = divs[i].id
   buttons[i].addEventListener("click", function() 
   {myFunction(currentDiv)},false);
}

最后,因为我发现一个回复说,selectByClassName第一个索引返回的结果有整个列表,所以我尝试在原始代码中更改i的初始值,但控制台stiil告诉我它无法读取id未定义的。 我该如何解决这个问题? (请详细说明,如果我的语法不好也很抱歉)

0 个答案:

没有答案