広告

posted by fanblog
「ここにブログの名前を入れます」は更新を終了しました。記事はすべて新ブログ「Big Bang」に移転済みです。記事のタイトルをクリックすると新ブログの該当記事に移動します。そちらでお楽しみください。

addEventListenerとattachEvent

addEventListenerattachEventはオブジェクトにイベントを追加する関数です。

この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);
	}
}

という形で関数を作って、次のように使います。

ev(window, 'load', function(){alert();}, false);

window.addEventListenerwindow.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>

新ブログ「Big Bang」で続きを読む