仕事で使うのはIE限定なのでattachEventでもいいがより共通関数っぽくしてみた。
attachEvent (第一引数 event はイベント名文字列(プレフィックスに 'on' を含む)、第二引数 実行する関数)
イベントハンドラを開放するには、detachEvent メソッドを使うそうだ。(出番がなさそうだ)
【コード】
注意点:イベント名がすべて小文字でないとNG
(実行時エラーにはならず、呼び出しも行われない。変なイベントとして登録されているようだ)
メモ:上記の場合、"B"(func2)が先に表示(実行)され"A"(func1)が先に表示(実行)された。
内部はどうもスタックのようになっているんだろうと思ったがIEでは順番は滅茶苦茶(保証されていない)との情報が・・・
確かに関数を複数登録すると呼び出しの順番が滅茶苦茶になるようだ。(引数ありの例では順番が守られなかった)
attachEvent (第一引数 event はイベント名文字列(プレフィックスに 'on' を含む)、第二引数 実行する関数)
イベントハンドラを開放するには、detachEvent メソッドを使うそうだ。(出番がなさそうだ)
【コード】
<html> <head> <script type="text/javascript"> function addEventListener( target , event , func ){ var element = document.getElementById(target) ; if ( element == null ) { return false ; } element.attachEvent( 'on' + event , func ) ; } function func1( ){ alert('A') ; } function func2( ){ alert('B') ; } //引数のあるバージョン function func3( val ){ alert( val ) ; } window.onload = function (){ addEventListener('targetA' , 'click' , func1 ) ; addEventListener('targetA' , 'click' , func2 ) ; addEventListener('targetB' , 'click' , function(){ func3('1'); } ) ; addEventListener('targetB' , 'click' , function(){ func3('2'); } ) ; addEventListener('targetB' , 'click' , function(){ func3('3'); } ) ; addEventListener('targetB' , 'click' , function(){ func3('4'); } ) ; addEventListener('targetB' , 'click' , function(){ func3('5'); } ) ; } </script> </head> <body> <input type="button" id="targetA" value="send" /> <input type="button" id="targetB" value="send" /> </body> </html>
注意点:イベント名がすべて小文字でないとNG
(実行時エラーにはならず、呼び出しも行われない。変なイベントとして登録されているようだ)
メモ:上記の場合、"B"(func2)が先に表示(実行)され"A"(func1)が先に表示(実行)された。
内部はどうもスタックのようになっているんだろうと思ったがIEでは順番は滅茶苦茶(保証されていない)との情報が・・・
確かに関数を複数登録すると呼び出しの順番が滅茶苦茶になるようだ。(引数ありの例では順番が守られなかった)