Backup of JavaScript/イベントリスナ (1) Back


Back to History list

#navi(../)
*DOMへのイベント割り当て(イベントリスナ) [#uffa61c7]
これまでは、ボタンがクリックされたときにclick_func()という関数を実行する場合、onclick要素を使ってきた。
 <button onclick="click_func();">ボタン</button>
これをイベントハンドラ式と呼ぶ。しかし、最近ではajax化が進みこの方法だと、関数の競合が起こりやすくなってきた。また、HTMLソースの見た目も悪くなる上、外部スクリプト化したときに正常に作動しないケースが多くなる。

そこで、onload時に命令を割り当ててしまおうという方法が最近のJavaScriptのプログラミングにおいて一般的となっている。onloadに関する情報は、[[../onloadイベント]]を参照。これをイベントリスナ式と呼ぶ。

**通常 [#n3e61ca4]
これは、フレームワークを用いない通常の方法

形式は、 addListener(要素のIDなど,イベントのタイプ(click,mouseoverなど),実行したい関数)となる。
 var addListener = function(elm, type, func) {
 	if(! elm) { return false; }
 	if(elm.addEventListener) { /* W3C準拠ブラウザ用 */
 		elm.addEventListener(type, func, false);
 	} else if(elm.attachEvent) { /* Internet Explorer用 */
 		elm.attachEvent('on'+type, func);
 	} else {
  		return false;
 	}
 	return true;
 };


これを用いることによって、HTML部は
 <button id="btn">ボタン</button>
となり、実際スクリプトを記述する部分は、後述する通常の方法では、さきほどのスクリプトの直下に
 addListener(document.getElementById('btn'), "click", click_func);
のように記述し、分離することが可能になる。

**prototype.jsの場合 [#s86f1c78]
prototype.jsの場合は、Event.observeで割り当て。$('...')は、document.getElementById('...')のショートカット。
 Event.observe($('btn'), 'click', click_func);

**[[dojo]]の場合 [#yf21e3aa]
基本的に以下のようになる。
 dojo.byId('btn')connect('onclick',click_func);
ただし、dijitなどで装飾しているフォームなどの場合は、
 dijit.byId('btn').connect('onclick',click_func);
のように、dojo.byIdが使えない場合があるので注意。

または、CSSセレクタを用いて、
 dojo.query('#btn').connect('onclick',click_func);
という指定方法も可能である。

**jQueryの場合 [#h730c4f3]
jQueryの場合はもっと簡単。基本的にid属性でアクセスという概念が無く、すべてCSSセレクタで指定する。

つまり、$()に入る要素の指定方法は、CSSで言うIDの指定方法と同じだ。dojoで言うところのすべてがdojo.query()とみなしてよい。
 $("#btn").click(click_func);

**upaaの場合 [#f7381e87]