2009-09-25 14 views
14

与えられたcssセレクタによってダイナミックに作成されたすべての要素にイベントリスナをバインドする必要があります。jQueryライブ関数のプロトタイプ

$(".foo").live("click", function(e) { 
    // bar 
}); 

このためプロトタイプで任意の等価はありますでしょうjQueryので

、?

答えて

21

これは通常Event#findElementで行われます。

document.observe('click', function(e, el) { 
    if (el = e.findElement('.foo')) { 
    // there's your `el` 
    // might want to stop event at this point - e.stop() 
    } 
}); 
+0

最も優れています。どうも!私が見つけたドキュメンテーションでは、CSSセレクタではなく、tagNameだけが許されていると述べました。しかし、Prototypeのソースを見ると、CSSセレクタが実際に許可されていることが確認されます。 – mynameistechno

+0

まあ、これはjQueryと全く同じではありません。これは、ドキュメントのクリックにバインドし、イベントを見つけますが、私はDOM変更のjQueryトリガーを信じて、イベントを新しい要素にバインドします。 JQuery **は**のようなものでしたが、jQuery 1.4のように、ホバーのようなイベントをサポートしていますので、一度でもカバーの下でこれをやってはいけないと思いますした。 – cgp

+0

@altCognito、これは、 'live'が導入されて以来、jQueryがライブバインドのフードとしてどのように機能するかはほとんどありません。 jQueryはネイティブに伝播しないイベントに対してハンドラーを 'document'にバインドできます.jQueryはそのようなイベントを手動で作成して伝播するためです。 – jangosteve

13

質問に対する正しい答えはここにある:

:プロトタイプでのjQuery .live()http://gurde.com/2011/08/jquery-live-in-prototype/

同等のEvent.on()メソッドであります

var handler = document.on(
    'click', 
    'div[id^="post-"] .attached-post-thumbnail', 
    function(event, element) { 
     console.log(this); 
     console.log(element); 
    }.bind(this) 
); 

handler.stop(); 
handler.start(); 

コールバック内でthisキーワードは、常に元の要素(この場合はドキュメント)を参照します。 。

+0

質問する正しい場所はmetaです。恐らく削除されたのはちょうどa-linkの回答だったが、目に見える理由はなかった。 –

+1

私の編集とhttp://stackoverflow.com/questions/how-to-answerを参照してください –

+0

リンクされた例が間違っていると思います。 'document.on(...)'はありませんが、同じ方法で 'Event.on(document、...) 'を使わなければなりません。 – clockworkgeek

関連する問題