未捕获的类型错误:非法调用addEventListener
Uncaught TypeError: Illegal invocation on addEventListener
我得到了这个尝试放下EventListener的两个版本的Uncaught TypeError: Illegal invocation
:(当应该添加侦听器时,我得到错误,而不是当我单击目标时)
ronan.addEventListener("click", alert, false);
addEventListener.apply(ronan, ["click", alert, false]);
ronan
是div
元素,由控制台成功返回,所以我不认为这是问题所在。知道为什么会出现这个错误吗?
您需要将alert
封装在函数中。
ronan.addEventListener("click", function() { alert('Hi'); }, false);
这里有一把小提琴作为证据。单独使用alert
不起作用,因为当执行侦听器时,该函数中的this
的值被设置为侦听的对象。例如,如果在ronan
上设置侦听器,则在该侦听器中this === ronan
。这给alert
带来了一个问题,因为该函数期望this
等于window
。您可以通过将函数包装在另一个函数中或将其绑定到它期望的this
来解决这个问题(没有双关语):
document.body.addEventListener('click', alert.bind(window), false);
不要忘记在IE <你需要使用attachEvent
而不是addEventListener
。>
apply
/call
与addEventListener
使用的注意事项
您的第二次尝试将不起作用,因为您试图将您的参数应用于window.addEventListener
,而不是HTMLElement.prototype.addEventListener
,这是一个完全不同的函数:
// This won't work
addEventListener.apply(ronan, ["click", alert.bind(window), false]);
// This will work
HTMLElement.prototype.addEventListener.apply(ronan, ['click', alert.bind(window), false]);
相关文章:
- AJAX调用中的非法调用
- 如何解决这种情况下的非法调用类型错误
- 为什么从数组调用时收到非法调用
- 使用ajax和bootbox进行非法调用
- 未捕获的类型错误:非法调用:模态形式的错误
- 对间谍对象的非法调用
- 非法调用错误 jquery
- $.post投掷”;非法调用”;
- 调用module.exports上的函数时发生CommonJS非法调用错误
- 使用 Web 音频 API 使用 start/noteOn 进行非法调用
- 为什么这会引发未捕获的类型错误:非法调用
- jQuery ajax Uncatch TypeError: 非法调用
- 什么是非法调用类型JavaScript中的错误
- 在 jquery 中将错误作为非法调用
- 为什么某些函数调用在 JavaScript 中被称为“非法调用”
- JavaScript 中的 getUserMedia() 跨浏览器规范化.非法调用
- Array.prototype.forEach.call 给出 TypeError: 非法调用
- 未捕获的类型错误:发送数据时非法调用
- 未捕获的类型错误:从 ajax 发送数据时出现非法调用错误
- 尝试将javascript转换为jquery时出现错误“非法调用”