addEventListener と attachEvent はイベント発生時に実行する関数を設定するためのメソッドですが、色々と問題点があるようで挫折・・・。
とりあえずベーシックなものを紹介。
//elemをクリックした際にfuncを実行する場合の例
elem.attachEvent("onclick",func); //IEの場合
elem.addEventListener("click",func,false); //IE以外の場合
上記はほぼ同じ振る舞いをしますが、func内部でのthis参照がIEは「window」、IE以外は「クリックされた要素」と異なります。この問題を解決するために下記の手順を踏みます。
elem.attachEvent("onclick",function(e){ func.call(elem,e); });//callメソッドでthis参照をelemに設定
elem.addEventListener("click",func,false);
これで、addEventListener と attachEvent の挙動は同じなりました(細かい違いはありますが)。
しかし、ここで問題が・・・。
イベントリスナーの削除ができません。
IE以外はremoveEventListenerで削除可能ですが、IEはイベントリスナーの登録に無名関数を使用しているので削除することができません。
まぁ、つまり詰んだということです\(^o^)/オワタ
やっぱこの辺はライブラリに任せるべきなのかなぁ。



コメント(0)
コメントが存在しません。