2012-10-05 20 views
7

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

特定のイベントタイプ(このケースでは私は現在mousewheelイベントに関係しています)に対してこれを行う方法は、どのようなイベントタイプでも機能する汎用の再利用可能なソリューションですか?あなたは、その後で、ターゲットにイベントを送出することができます

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; 
} 

+0

あなたは ''でelement.dispatchEvent(マウスホイールのイベントを)しようとしましたか?あなたは 'createEvent()'を通して考えている新しいマウスイベントをインスタンス化することができます。 – Sebas

答えて

4

私は、少なくとももMouseEventのため具体的には、私自身の答えを見つけ

target.dispatchEvent(evt); 
+0

cloneMouseEventのパラメータである 'e'の値を私たちと共有できますか?もちろん、あなたが必要とする値だけになりますが、落とし穴を避けるためにはまだ役立ちます... – GameAlchemist

+0

混乱してごめんなさい、「e」は初期イベントハンドラに渡されるJavaScriptイベントオブジェクトです。私はクローンしたいものです。 – devios1

1

あなたは(悪い文書を使用する場合があります)NWEvents library

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

イベントと以前のIEでも動作します。

4

initMouseEventなどが推奨されていないため、今やもっと良い解決策があるようです。 MouseEvent()コンストラクタは、たとえば、既存のMouseEventオブジェクトを使用することができたために、その2番目のパラメータとしての特性のテーブルをとります。イベントの

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

他のクラスは、同じように使用可能でなければなりません同様のコンストラクタを持っています。 ClipboardEvent()などです。

jsfiddle example

+0

これは私が見た最善の方法です。ありがとうございました。 –

+0

一部のプロパティは、このメソッド(targetまたはcurrentTargetなど)でコピーできません。 – shuji

+0

@shuji次のように値を設定できます: 'my_event.target = some_element' –

関連する問題