prototype.js 1.5.0_pre0 の $$() のデモ

comments(4) | trackback(0)

はてなブックマークに追加 はてなブックマーク数 del.icio.us に追加 livedoor クリップに追加 livedoor クリップ数 Yahoo!ブックマークに追加

  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/

  prototype.js 1.5.0_pre0 の $$() のデモ

  ただし,これ,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 以外では動きませんね……
  とりあえず,ここまでとして,いったん公開しておきます.

タグ: [JavaScript]

この記事へのコメント

こんにちは、いつも楽しく拝見しています。

prototype.js 1.5.0_pre0 の $$() のデモ
<http://pocari.org/demo/prototype-1.5.0_pre0-daller-daller/>
のページで"Forefox 以外では動きません..."と記されています。
"Firefox" の間違いではないでしょうか。

Renzai | 2006/05/07 (Sun) 12:26:02

ご連絡ありがとうございます.
修正しておきました.

sunaoka | 2006/05/07 (Sun) 13:11:48

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
でうごきませんが、、、

とおりすがり | 2006/10/24 (Tue) 16:29:12

それは不思議ですね.

Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7

でも

Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1) Gecko/20061010 Firefox/2.0

でも動くのですけどね.

en-US だと,JavaScript の動作が何か違うのでしょうかね?

sunaoka | 2006/10/24 (Tue) 16:33:26

この記事へのコメントを書く

名前:

メールアドレス (公開されません):

URL:

コメント (入力必須)

この記事へのトラックバック URL

http://cl.pocari.org/tb.php/2006-02-26-1

この記事へのトラックバック

(トラックバックはありません)