我试图解决为什么这段代码不起作用。我读了DOM并添加了事件监听器,我知道事件监听器只能添加到DOM的对象中。从技术上讲,_get_elem的返回值应该是一个DOM对象,但它仍然无法正常工作。如果有人知道为什么这不起作用或指向一个可以解释如何做的资源的方向,那将非常感激。
window.onload = funtion()
{
// works
document.getElementByID('element_id').addEventListener('click', _fn(), false);
var exfnvar = new exfn();
// doesn't work
exfnvar.exel.addEventListener('click', _fn(), false);
// also doesn't work
exfnvar._get_elem().addEventListener('click', _fn(), false);
};
var exfn = function()
{
this.exel = document.getElementByID('element_id');
this._get_elem = function()
{
return document.getElementByID('element_id');
}
};
function _fn()
{
// do something.
};
答案 0 :(得分:4)
您正在调用该函数并将返回值作为对事件侦听器的回调。相反,你必须将函数作为回调函数。
更改
document.getElementByID('element_id').addEventListener('click', _fn(), false);
到
document.getElementByID('element_id').addEventListener('click', _fn, false);
与其他名单相同..
答案 1 :(得分:1)
如果你写.addEventListener('click', _fn(), fale)
,_fn
正在这一行中执行,结果(返回值)被添加为事件回调。
您已省略_fn
的函数体,但假设它没有返回另一个函数,您应该使用.addEventListener('click', _fn, false)
- 这样就会添加对_fn
的引用一个监听器,而不是它的执行结果。
答案 2 :(得分:0)
经过一些改变,它对我来说很好。需要注意的一点是资本化:
getElementById
VS
getElementByID
此外,当您将函数作为回调传递时,您不希望包含括号。您只想在执行该功能时包含该功能。