12

一部のブラウザーでは、既にディスパッチされたイベントを再ディスパッチすることはできませんが、既存のイベント オブジェクトから取得できる値に基づいて新しいイベント オブジェクトを作成することはできます。

どのイベントタイプでも機能する、またはそれが失敗する、特定のイベントタイプに対してこれを行う方法である、一般的で再利用可能なソリューションはありますか (私の場合、私は現在mousewheelイベントに関心があります)?

4

3 に答える 3

8

などは推奨されていないため、さらに優れた解決策がinitMouseEventあるようです。たとえば、MouseEvent()コンストラクターは、既存の MouseEvent オブジェクトを使用できる 2 番目のパラメーターとしてプロパティのテーブルを受け取ります。

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 に答える