12

一些浏览器不允许您重新分派已经分派的事件,但允许您根据可以从现有事件对象获得的值创建新的事件对象。

是否有适用于任何事件类型的通用且可重用的解决方案,或者如果失败,是否有针对特定事件类型执行此操作的方法(在我的情况下,我目前关心该mousewheel事件)?

4

3 回答 3

8

似乎现在有一个更好的解决方案,因为initMouseEvent等已被弃用。例如,MouseEvent()构造函数将属性表作为其第二个参数,您可以为此使用现有的 MouseEvent 对象:

let my_event = new MouseEvent(`foo`, some_existing_mouse_event);
dispatchEvent(my_event);

其他类别的事件具有类似的构造函数,应该以相同的方式使用。例如ClipboardEvent()

jsfiddle 示例

于 2015-09-19T16:44:54.430 回答
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 );
于 2012-10-05T19:38:54.743 回答
1

您可能想要使用(记录不充分的)NWEvents 库

NW.Event.dispatch(target, e.type, false, e);

适用于任何事件,也适用于较旧的 IE。

于 2012-10-06T06:48:13.143 回答