Javascript addEventListener在哪里关闭?
我了解到可以在循环()中为addEventListener使用闭包 但是,此方法不适用于更复杂的示例:Javascript addEventListener在哪里关闭?,javascript,closures,addeventlistener,Javascript,Closures,Addeventlistener,我了解到可以在循环()中为addEventListener使用闭包 但是,此方法不适用于更复杂的示例: function f(fevent) { var a = document.createElement('a'); a.innerHTML = 'Test'; a.href = '#'; a.addEventListener('click', fevent); return a; }; for (l = 0; l < 2; l += 1) { for (h =
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}
}
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}
}
编辑:我想要的是锚上的单击事件,以提醒不同的组合(0,0)、(1,0)、(0,1)和(1,1)。但它总是发出警报(2,2)
下面是我在上面尝试的闭包方法:
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
(function() {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}());
}
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
(功能(){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}());
}
我还尝试为闭包添加参数:
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
(function() {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}(l,h));
}
}
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
(功能(){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}(l,h));
}
}
也许有人能给我一些启发
编辑:下面是一个使用以下公认解决方案中的方法的工作小提琴:
在代码的最后一行,您将向函数传递两个参数
在第一行,您不接受任何参数
您不使用传递给该函数的值,而是使用循环中的值(循环每次运行时都会更改)
在代码的最后一行,您将向函数传递两个参数
在第一行,您不接受任何参数
您不使用传递给该函数的值,而是使用循环中的值(循环每次运行时都会更改)
请定义“不工作”请定义“不工作”太好了。我想我被上面引用的闭包解决方案弄糊涂了,因为它不带任何变量。我会在我的问题中添加更多的故事。太好了。我想我被上面引用的闭包解决方案弄糊涂了,因为它不带任何变量。我会在我的问题中添加更多的故事。
(function() {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}(l,h));
(function(my_l, my_h) {
document.body.appendChild(
f(function() {alert(my_l+','+my_h);})
);
}(l,h));