Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript addEventListener的for循环中基于索引的参数_Javascript_Html_Jquery_Arguments_Addeventlistener - Fatal编程技术网

Javascript addEventListener的for循环中基于索引的参数

Javascript addEventListener的for循环中基于索引的参数,javascript,html,jquery,arguments,addeventlistener,Javascript,Html,Jquery,Arguments,Addeventlistener,我正在向HTML中添加一些JS,我有一段类似于以下内容的代码: 功能按钮操作(索引){ 警报(“我的索引是:”+索引); 如果(窗口大){ //使用索引做某事 } 否则{ //使用索引执行其他操作 } } 函数WindowResize(){ 如果(window.innerWidth>1200){ 窗口大=真; } 否则{ 窗口大=假; } } 窗口大; 如果(window.innerWidth>1200){ 窗口大=真; } 否则{ 窗口大=假; } buttons=document.getE

我正在向HTML中添加一些JS,我有一段类似于以下内容的代码:


功能按钮操作(索引){
警报(“我的索引是:”+索引);
如果(窗口大){
//使用索引做某事
}
否则{
//使用索引执行其他操作
}
}
函数WindowResize(){
如果(window.innerWidth>1200){
窗口大=真;
}
否则{
窗口大=假;
}
}
窗口大;
如果(window.innerWidth>1200){
窗口大=真;
}
否则{
窗口大=假;
}
buttons=document.getElementsByClassName('MyButtons')
var i;
对于(i=0;i
这个想法可以概括如下:

  • 页面中有一系列按钮,存储在按钮[]中
  • 如果窗口大于某个大小,则这些按钮应执行一个操作,如果没有,则执行另一个操作
  • 要执行上述操作,我需要按钮[x].id。事实上,最初的目的是让听众:
按钮[i].addEventListener(“单击”,函数(){ButtonAction(i);},false);
问题是我无法检索id,因为在事件侦听器中传递的参数似乎总是
I
设置的最后一个值。
我可以请求一些帮助吗?

的(让i=0;
Andreas注释的长版本:全局
var i
的问题如下:假设您添加了10个事件侦听器;此时,在循环之后,
i==10
。然后单击任意按钮;
i
将始终等于10,无论您做什么。为了“嵌入”在每个事件侦听器中,
i
的每个值都需要一个闭包,这相当复杂。幸运的是,由于ES6,我们可以使用
let
而不是
var
,这为每个循环创建了一个非常方便的局部范围变量。因此,解决方案是
for(let i=0;…)
和一个甚至更长的可以在dupe目标中找到解释;)