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]