Javascript动态添加EventListener和节点引用
这在Firefox中起作用 HTML 但是,我想动态地将单元格引用“c1”传递给事件侦听器 如果我理解正确,我不能把电话改成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))
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);