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);
        });
    }