Javascript动态添加EventListener和节点引用

Javascript动态添加EventListener和节点引用,javascript,javascript-events,addeventlistener,Javascript,Javascript Events,Addeventlistener,这在Firefox中起作用 HTML 但是,我想动态地将单元格引用“c1”传递给事件侦听器 如果我理解正确,我不能把电话改成 ib.addEventListener('change', foo(tdID), false); 因为括号将返回foo的返回值,而不是作为函数返回foo 但是,我可以通过将tdID声明更改为 this.var tdID = "c1"; 。。。还有福托 function foo (){ if (document.getElementById(tdID))

这在Firefox中起作用

HTML

但是,我想动态地将单元格引用“c1”传递给事件侦听器

如果我理解正确,我不能把电话改成

ib.addEventListener('change', foo(tdID), false);
因为括号将返回
foo
的返回值,而不是作为函数返回
foo

但是,我可以通过将tdID声明更改为

this.var tdID = "c1";
。。。还有福托

function foo (){
    if (document.getElementById(tdID))
        {
        document.getElementById(tdID).appendChild(document.createTextNode(" and goodbye"));             
        }
}; 
如果我理解正确,它可以工作,因为
foo
createinputable
中被调用,这意味着它可以在
createinputable
中看到this变量

但是,这不会给我想要的,因为我想用tdID的新值创建第二行。上面的示例似乎只是将单元格引用硬编码为
foo


如何动态地将单元格引用传递到
foo
(以面向对象的方式)?

一种优雅的方式是:

function foo (tdID){
    return function(){
        if (document.getElementById(tdID))
        {
            document.getElementById(tdID).appendChild(document.createTextNode(" and goodbye"));             
        }
    }
}; 
然后你就可以写了

ib.addEventListener('change', foo(tdID), false);
因为对
foo(tdID9)
的调用将返回一个参数数目正确的函数,并且“知道”正确的'tdID'值,因为它是在内部函数的闭包中捕获的

这种技术被称为。

(在面向对象风格中)到目前为止,代码中没有“面向对象”的内容
function foo (tdID){
    return function(){
        if (document.getElementById(tdID))
        {
            document.getElementById(tdID).appendChild(document.createTextNode(" and goodbye"));             
        }
    }
}; 
ib.addEventListener('change', foo(tdID), false);