Javascript对象未被识别为addEventListener的DOM对象
Javascript object not recognized as DOM object for addEventListener
我正试图弄清楚为什么这段代码不起作用。我阅读了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
此外,当您将函数作为回调传递时,不希望包含圆括号。您只想在执行函数时包含它。
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- Chrome开发工具(如何知道我在调用哪个javascript对象)