3

addEventListener または attachEvent (ブラウザーによって異なります) を使用してオブジェクトにイベントを追加するとします。これらのイベントを後でプログラムで呼び出すことはできますか?

イベント ハンドラーは、次のようなオブジェクトを使用して追加/削除されます。

var Event = {
    add: function(obj,type,fn) {
        if (obj.attachEvent) {
            obj.attachEvent('on'+type,fn);
        } else {
            obj.addEventListener(type,fn,false);
        }
    },
    remove: function(obj,type,fn) {
        if (obj.detachEvent) {
            obj.detachEvent('on'+type,fn);
        } else {
            obj.removeEventListener(type,fn,false);
        }
    }
}

それとも、各ハンドラーのコピーを保存して、Event.invoke(...) 関数を追加するだけでよいですか?

編集:また、jQueryはオプションではありません:D

4

2 に答える 2

11

いつものように、Internet Explorerの場合は一方向に、他のすべての場合は正しい方法で行う必要があります;-)

IEの場合:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover");

詳細については、MSDNライブラリを参照してください。

実際のブラウザの場合:

var event = document.createEvent("MouseEvent");
event.initMouseEvent("mouseover", true, true, window);
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event);

2番目の標準ベースのアプローチはより時間がかかるように見えますが、かなり柔軟性があります。https: //developer.mozilla.org/en/DOM/にあるMozillaDOMイベントリファレンスから始めてドキュメントを確認してください。イベント

あなたがやろうとしていることに接線方向にのみ関連していますが(通常のイベントではなく、カスタムイベントに関連しています)、DeanEdwardsのサンプルコードはhttp://dean.edwards.name/weblog/2009/03/callbacks-vsにあります。 -イベント/一見の価値があるかもしれません。

于 2009-08-04T10:14:30.860 に答える
1

必要な作業を行う関数を作成し、イベントからそれらを実行し、後で必要になったときに同じ関数を実行することはできませんか?

于 2009-08-04T06:21:16.367 に答える