Javascript对象未被识别为addEventListener的DOM对象

Javascript object not recognized as DOM object for addEventListener

本文关键字:对象 addEventListener DOM 识别 Javascript      更新时间:2023-09-26

我正试图弄清楚为什么这段代码不起作用。我阅读了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.
};

您正在调用该函数,并将返回值作为回调提供给事件侦听器。相反,您必须将函数作为回调函数。

更改

document.getElementByID('element_id').addEventListener('click', _fn(), false);

document.getElementByID('element_id').addEventListener('click', _fn, false); 

其他听众也是如此。。

如果您编写.addEventListener('click', _fn(), fale),则_fn将在这一行中执行,结果(返回值)将作为事件回调添加。

您已经省略了_fn的函数体,但假设它没有返回另一个应该使用.addEventListener('click', _fn, false)的函数——通过这种方式,添加了对_fn的引用作为侦听器,而不是其执行的结果。

经过几次更改后,它对我来说运行良好。需要注意的一点是资本化:

getElementById

getElementByID

此外,当您将函数作为回调传递时,不希望包含圆括号。您只想在执行函数时包含它。