JavaScript/イベントリスナ
DOMへのイベント割り当て(イベントリスナ)
これまでは、ボタンがクリックされたときにclick_func()という関数を実行する場合、onclick要素を使ってきた。
<button onclick="click_func();">ボタン</button>
これをイベントハンドラ式と呼ぶ。しかし、最近ではajax化が進みこの方法だと、関数の競合が起こりやすくなってきた。また、HTMLソースの見た目も悪くなる上、外部スクリプト化したときに正常に作動しないケースが多くなる。
そこで、onload時に命令を割り当ててしまおうという方法が最近のJavaScriptのプログラミングにおいて一般的となっている。onloadに関する情報は、../onloadイベントを参照。これをイベントリスナ式と呼ぶ。
通常
これは、フレームワークを用いない通常の方法
形式は、 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の場合
prototype.jsの場合は、Event.observeで割り当て。$('...')は、document.getElementById('...')のショートカット。
Event.observe($('btn'), 'click', click_func);
dojoの場合
基本的に以下のようになる。
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の場合
jQueryの場合はもっと簡単。基本的にid属性でアクセスという概念が無く、すべてCSSセレクタで指定する。
つまり、$()に入る要素の指定方法は、CSSで言うIDの指定方法と同じだ。dojoで言うところのすべてがdojo.query()とみなしてよい。
$("#btn").click(click_func);
uupaa-jsの場合
uu.event.set(null,uu.id('btn'),'click',false)
Last Modified: 2008-11-21 21:15:19