prototype.js 1.5.0_pre0 の $$() のデモ
2006-02-26-1: [JavaScript]
prototype.js 1.5.0_pre0 から $$() という関数が使えるようになりました.
これは,CSS のようなのセレクタを使って要素を指定できるもので,ChangeLog によると
$$('div#page p.summary img').each(Element.hide)
これで,id が page な div の孫要素で,class が summary の p の孫要素 img が選択できます.
早速,これを使って,フォームの入力項目の disable を切り替えるデモを作ってみました.
- prototype.js 1.5.0_pre0 の $$() のデモ
http://pocari.org/demo/prototype-1.5.0_pre0-daller-daller/
ただし,これ,Firefox 以外では動きません.Opera 8.5 でも Netscape 7.1 でも動きません.
でも,せっかく作ったので公開しておきます.
ちなみに Firefox 1.5.0.1 で動作確認をしています.
JavaScript のソースは以下のようになっています.
var ToggleForm = Class.create();
ToggleForm.prototype = {
initialize: function () {
$('input_on').checked = true;
// form#menu input.item にイベントハンドラを追加
$$('form#menu input.item').each(this.addToggleEvents.bind(this));
},
addToggleEvents: function (value, index) {
// value は form#menu input.item の要素 (入力可能/入力不可)
Event.observe($(value), 'click', this.toggle.bindAsEventListener(this), false);
},
toggle: function (event) {
// イベントが発生した要素
var element = Event.element(event);
this.disabled = $F(element) == 0 ? true : false;
$$('form#register input').each(this.doToggle.bind(this));
},
doToggle: function (value, index) {
// value は form#input input の要素 (名前,メールアドレス...)
$(value).disabled = this.disabled;
}
};
Event.observe(window, 'load', function () {
new ToggleForm();
}, false);
まず以下のように
$$('form#menu input.item').each(this.addToggleEvents.bind(this));
で,id が menu なフォームで class が item な 孫要素 input それぞれに対して,click なイベントハンドラを追加していきます.
デモページの [入力可能],[入力不可] の部分です.そして,
addToggleEvents: function (value, index)
ここで,実際にイベントハンドラを追加しています.
イベントが発生した場合は
toggle: function (event)
が実行されてこの中では,
$$('form#register input').each(this.doToggle.bind(this));
このように,id が register な form の 孫要素 input に対して処理が行われるようになっています.
流れとしては単純なのですが,前述のように Firefox 以外では動きませんね……
とりあえず,ここまでとして,いったん公開しておきます.