JavaScriptでActionScriptのようにカスタムイベントが使えたらいいなぁと思って調べてみました。AS3のようにカスタムイベントクラスを作って~という方法ではないですが、イベントのtypeを自分で独自に設定することができそうだったので、そちらでやってみました。
IEが問題で、IE9以降ではaddEventListenerが使えるようですが、それ以前はattachEventしか使えません。またfireEventはtargetがdocumentの子ノードとして配置していないとエラーになってしまいました。さらに、attachEventするイベントはIEで定められているものしか使えないようです。
これを何とかしてみたのが以下のものです。
使用方法は中にある通りです。
spfdCustomEvent.addListener("登録したいDOMオブジェクト", "イベント名", function(e){alert("呼びたい処理")}); spfdCustomEvent.dispatch("登録したDOMオブジェクト", "イベント名");
という感じで使用できるはずです。
こちらのサイトさんを参考にさせていただきました。detachEventにも対応させたかったので、1度クロージャにしたんですが、リスナにクロージャを登録して削除するところで失敗したので、別のやり方にしています。
他ライブラリを使えば余裕で実現できるかと思いますが、ライブラリに依存しない形で持っておきたかったのです。