某些浏览器不允许您重新分派已分派的事件,但允许您根据可从现有事件对象获取的值创建新的事件对象。
是否存在适用于任何事件类型的通用且可重用的解决方案,或者失败,为特定事件类型执行此操作(在我的情况下,我目前关注的是mousewheel
事件) ?
答案 0 :(得分:5)
我找到了自己的答案,至少对于MouseEvents而言:
function cloneMouseEvent( e ) {
var evt = document.createEvent( "MouseEvent" );
evt.initMouseEvent( e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget );
return evt;
}
然后,您可以使用以下命令在目标上调度事件:
target.dispatchEvent( evt );
答案 1 :(得分:5)
现在似乎有一个更好的解决方案,因为initMouseEvent
等已被弃用。例如,MouseEvent()构造函数将属性表作为其第二个参数,您可以使用现有的MouseEvent对象:
let my_event = new MouseEvent(`foo`, some_existing_mouse_event);
dispatchEvent(my_event);
其他类事件具有类似的构造函数,应该以相同的方式使用。例如ClipboardEvent()。
答案 2 :(得分:1)