Javascript 如何传递元素';匿名函数的ID?
我正在尝试通过如下操作向具有相同类的元素添加事件侦听器Javascript 如何传递元素';匿名函数的ID?,javascript,anonymous-function,Javascript,Anonymous Function,我正在尝试通过如下操作向具有相同类的元素添加事件侦听器 // Add listener's to all elements that have a class name of "foo" var foos = document.getElementsByClassName("foo"); for (i = 0; i < foos.length; i++) { var fooId = foos[i].id; foos[i].addEventListener('click',
// Add listener's to all elements that have a class name of "foo"
var foos = document.getElementsByClassName("foo");
for (i = 0; i < foos.length; i++) {
var fooId = foos[i].id;
foos[i].addEventListener('click', function(){doFoo(fooId)});
}
function doFoo(id) {
document.getElementById("console").innerHTML += "<li>You clicked Foo " + id + "</li>";
}
//向类名为“foo”的所有元素添加侦听器
var foos=document.getElementsByClassName(“foo”);
对于(i=0;i您单击了Foo”+id+“”;
}
除了匿名函数参数“fooId”将始终计算为集合的最后一个元素的id,而不是循环范围内的项的id之外,上述JavaScript还可以工作
如何将元素id的id传递给匿名函数参数
在这个提琴中,您将看到,无论您单击哪个Div,JavaScript都会声明您单击了最后一个Div。var foos=document.getElementsByClassName(“foo”);
var foos = document.getElementsByClassName("foo");
for (i = 0; i < foos.length; i++) {
var fooId = foos[i].id;
var f = function (fooId) {
return function (){doFoo(fooId)};
}(foos[i].id);
foos[i].addEventListener('click', f);
}
对于(i=0;i
用于(i=0;i您单击了Foo”+fooId+””;
}
函数doFoo(id){
document.getElementById(“控制台”).innerHTML+=“您单击了Foo”+id+“ ”;
}
var foos=document.getElementsByClassName(“foo”);
对于(i=0;i
事件有目标,利用它
在Firefox中不起作用。编辑为使用event.srcement。谢谢!仍然不起作用。event
将不会被定义。无需担心。我是盲的!!!或者,您可以将事件侦听器绑定到内部函数中。function(fooId){foos[I]。addEventListener('click',function(){doFoo(fooId)}}(foos[I].id)
。它更具可读性,依我看。@Notulysses-谢谢你的回答。你能告诉我在哪里我可以阅读更多关于你附加了}(foos[I].id)的语法吗;?i、 我想知道你的解决方案是如何/为什么起作用的。@Jed:很高兴帮助你!Link:还有,@Jed,.@Jed:这并不重要,我这样写只是为了强调循环中不断变化的id
属性
for (i = 0; i < foos.length; i++) {
var fooId = foos[i].id;
foos[i].addEventListener('click', function (e, args) {
doFoo(e);
});
function doFoo(e) {
var fooId = e.target.id || e.srcElement.id;
document.getElementById("console").innerHTML += "<li>You clicked Foo " + fooId + "</li>";
}
function doFoo(id) {
document.getElementById("console").innerHTML += "<li>You clicked Foo " + id + "</li>";
}
var foos = document.getElementsByClassName("foo");
for (i = 0; i < foos.length; i++) {
foos[i].addEventListener('click', function (e) {
doFoo(e.target.id);
});
}