l'essentiel est invisible pour les yeux

Sunday, January 13, 2008

[Javascript] クロージャを利用したイベントリスナの登録

時々、特定のイベント間で値を共有したい事があります。
以下の例は、選択されているボックスの状態をどこかに保存しておいて、別のボックスが選択されたら選択を取り消すサンプルです。選択されているエレメントの値を保存する場所としては、グローバル変数か、エレメントのプロパティ(IEで使用するためには、Element.extendされている必要がある。event.targetは、Element.extendされている。)がありますが、イベントリスナにクロージャーを利用すると名前空間も汚染されません。



Source Code
selected変数に、現在選択されているボックスをバインドしている。

document.observe('dom:loaded', function() {
$('selection').observe('click', (function() {
var SELECTED_CLASS_NAME = 'selected';
var selected;
return function(event) {
if(selected) selected.removeClassName(SELECTED_CLASS_NAME);
event.target.addClassName(SELECTED_CLASS_NAME);
selected = event.target;
};
})());
});