首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dispatchEvent导致在“EventTarget”上执行“dispatchEvent”错误:参数1不是“事件”类型

dispatchEvent导致在“EventTarget”上执行“dispatchEvent”错误:参数1不是“事件”类型
EN

Stack Overflow用户
提问于 2017-01-29 11:15:52
回答 2查看 24.7K关注 0票数 18

我使用的是Angular2 + TypeScript,当我尝试执行以下代码时:

代码语言:javascript
复制
var event = new Event('check');
window.dispatchEvent(event);

此代码导致下一个错误:

未能在‘EventTarget’上执行'dispatchEvent‘:参数1不是“事件”类型。

我什么都试过了,发现这样做是可行的:

代码语言:javascript
复制
var event = new CustomEvent('check');

问题是任何IE都不支持CustomEvent。

另一件工作是:

代码语言:javascript
复制
var event = new Event('CustomEvent');
event.initCustomEvent('check');

问题是InitCustomEvent被废弃了。

我能做些什么来避免这种类型错误吗?也许在打字稿的某个地方破例?还是使用任何不建议使用并适用于IE的代码?

EN

回答 2

Stack Overflow用户

发布于 2017-02-06 09:36:17

找到了解决办法。

对于某些TypeScript设置,只有在插入第二个参数时,新事件才是“事件”的类型,如下例所示:

代码语言:javascript
复制
window.addEventListener('check', e => console.log(e.type))

var event = new Event('check', { bubbles: true, cancelable: false })
document.body.dispatchEvent(event) // event will buble up to window

票数 13
EN

Stack Overflow用户

发布于 2019-08-05 09:30:21

我在StackOverFlow上找到了另一个答案。

链接:https://stackoverflow.com/a/37687099/6264260

代码语言:javascript
复制
if (event && event.originalEvent) {
    var oe = event.originalEvent;
    this.dispatchEvent(new oe.constructor(oe.type, oe));
}

对我来说很管用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41920266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档