繁体   English   中英

InvalidStateError:无法在“EventTarget”上执行“dispatchEvent”

[英]InvalidStateError: Failed to execute 'dispatchEvent' on 'EventTarget'

我试图在 Javascript 中欺骗鼠标事件。 这是发生了什么:

// Create event object
var event = new CustomEvent('mousedown');
    
// Initialize
event.initCustomEvent('mousedown', true, false, {});

// Inherit
event = Object.create(event);
event.pageX = 10;
event.pageY = 10;

现在,派...

targetElement.dispatchEvent(event);

当我这样做时,我收到错误:

错误:无法在“EventTarget”上执行“dispatchEvent”:提供的事件为空。

我究竟做错了什么?

事件必须有自己类型属性,继承的类型属性是不够的,这意味着类型被视为未定义,因此出现错误

// Create event object
var event = new CustomEvent('mousedown', {bubbles: true, cancelable: false});

// initCustomEvent deprecated, see below

// Inherit
event = Object.create(event);
event.type = 'mousedown';
event.pageX = 10;
event.pageY = 10;

此错误也可能是对其他意外行为的警告,这些行为源于您调度从事件继承而不是拥有自己的属性的对象的方式。

CustomEvent实例不是密封的,因此您始终可以直接向它们添加属性

var ev = new CustomEvent('mousedown', {bubbles: true, cancelable: false});
ev.pageX = 10;
ev.pageY = 10;

请注意customEvent.initCustomEvent方法已弃用,您应该将此信息作为第二个参数中的字典传递给构造函数,

var cev = new CustomEvent('mousedown', {bubbles: true, cancelable: false});

如果您不需要detail属性,请考虑使用Event而不是CustomEvent

var eev = new Event('mousedown', {bubbles: true, cancelable: false});
// cev as above, now consider
'detail' in cev; // true
cev.detail; // null
// vs
'detail' in eev; // false
eev.detail; // undefined

mousedown事件的只读细节通常为0 (很少被代码检查)

问题是这条线

event = Object.create(event);

显然, dispatchEvent期望事件对象具有它无法找到的某些自己的属性,因为它没有检查原型。 然后它假定传递的对象不是格式良好的事件实例。 因此错误。

我不确定为什么要在原型中使用原始事件创建新对象,否则一切都应该正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM