addEventListenerとattachEventはオブジェクトにイベントを追加する関数です。
この2つは起動時に、window.onloadと併用しても使えます。
window.onloadは、複数書くと最後の1個だけが作動しますが(前にあるwindow.onloadは上書きされて消えてしまう)、この関数を使うことで起動時の関数を複数動作させられます。
addEventListener
addEventListenerはInternet Explorer以外で使えます。
addEventListener(イベント名, イベント発生時に呼び出す関数, イベントの伝達方向)
イベント名にはonがつきません。第3引数は通常はfalseを指定します。
trueにすると、イベントが発生した瞬間、バブリングを待たずにイベントを処理できるようになります。
登録した関数は、登録順に実行されます。
例: window.addEventListener('load', function(){alert();}, false);
attachEvent
attachEventはInternet ExplorerとOperaで使える関数でaddEventListenerと同等の働きをします。
attachEvent(イベント名, イベント発生時に呼び出す関数)
イベント名にはonがつきます。
登録した関数の実行順は不規則です。
例: window.attachEvent('onload', function(){alert();});
Internet Explorerとそれ以外のブラウザの両方に対応させるには
var ev=function(elem, event, func, useCapture){ if(elem.addEventListener){ elem.addEventListener(event, func, useCapture); }else if(elem.attachEvent){ elem.attachEvent('on'+event, func); } }
または
var ev=function(elem, event, func, useCapture){ try{ elem.addEventListener(event, func, useCapture); }catch(e){ elem.attachEvent('on'+event, func); } }
という形で関数を作って、次のように使います。
window.addEventListenerとwindow.attachEventは、window.onloadと一緒に使うことも出来ます。
その場合は、window.onloadの後に、この関数でイベントを追加する形になります。
ですから、呼び出される順番は、window.onloadで定義した関数より後になります。
起動時に、window.onloadと併用する例
<script type="text/javascript"> window.onload=function(){ /* 既にwindow.onloadで起動スクリプトが指定されているとする */ } /* 起動時のアクションを追加 */ var ev=function(event , func, useCapture){ if(window.addEventListener){ window.addEventListener(event, func, useCapture); }else if(window.attachEvent){ window.attachEvent('on'+event, func); } } var addAction=function(){ /* 起動時に実行したい処理 */ } /* このように関数を別に定義して、関数名を入れても動作する */ ev('load', addAction, false); </script>