- ベストアンサー
登録済みイベントリスナーの情報を取得したい
子画面に別機能をロードするようなページを作成しており、その子画面がオンロードで登録したイベントリスナーをクローズの際に削除するような仕組みにしています。 この処理を行う際、登録済みのリスナー情報を取得できる方法があれば知りたいのですが、方法がわかりません。 (無ければ無いで、管理マネージャーのような仕組みを作成しようと思っています。) よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
# No.1 は質問内容を誤読してました。 eventTarget.onclick = function() { .. } のようにレガシーな書き方をしている場合は No.1 のように String 変換すれば内容を取得&編集可能です。 addEventListener/attachEvent した場合はオーサからリスナー登録状況を見ることはできませんので、管理マネージャを自作して下さい。 # たとえば prototype.js では Event.observers にイベントリスナをキャッシュしています。
- 参考URL:
- http://prototype.conio.net/
その他の回答 (1)
- Chaire
- ベストアンサー率60% (79/130)
追加 eventTarget.addEventListener('click', listener, false); // W3C standard eventTarget.attachEvent('onclick', listener); // IE ↓ 削除 eventTarget.removeEventListener('click', listener, false); // W3C standard eventTarget.detachEvent('onclick', listener); // IE # 現在 DOM2-Events を実装しているメジャーブラウザは Gecko 系,khtml 系,Opera 等。 もし eventTarget.onclick = function() { .. } のようなレガシーな書き方をしているなら // onclick の中から listener(..); の記述を取り除く eval("eventTarget.onclick = " + eventTarget.onclick.toString().replace(/listener\s*\([^)]*\)[;\s\n]*/, '')); # なお prototype.js でも IE メモリリーク対策で unload 時にリスナ破棄しているので参考にして下さい。
お礼
Chaireさん、回答ありがとうございます。 addEventListener/attachEventでの登録を行っていますので、管理マネージャらしきものを作成しようと奮闘しているところです。 prototype.jsのソースも見てみましたが、ちょっと現状で自分には難解です(^^; ただ、リスナー登録と同時に登録情報を保存するという考え方は一緒のようなので、拙いながらも現状作成しているものでやってみようと思います。