2011-01-04 10 views
0

JavaScriptを書くときに、ページがロードされるときにイベントが割り当てられる一連のインターフェースボタンがあります。私の問題は、動的に作成されたものは、これらのイベントを受け取らないことです。ページがロードされた後のJavascriptの処理イベント

たとえば、私はURLチェッカーを作っています。他のドメインに移動するリンクが、ユーザーに離脱したことを知らせるexitインターフェイスを提供することを確認することです。ページがロードされた後に作成されたリンク、ページがロードされたときに存在していたものとして自然にそのイベントを持っていないものなど、ajaxを投稿します。

実際に、新しく作成されたアイテムがこれらの種類のグローバルイベントを確実に取得する最良の方法は何ですか?

私はjQueryを使いたいですが、これは本当に概念的な質問です。

グローバルリンクエフェクトを再適用する関数を作成する必要がありますか、またはそれを少しずつ行う以外にもスマートな方法はありますか?

+0

を、誰がどのように知っています.live()は動作しますか?それはタイムアウトか、実際のDOMイベントですか?また、hrefが一連の要件を満たす場合など、より複雑なフィルタも処理できますか? (httpなどで始まる) –

+2

@Bob:[jQueryのドキュメント](http://api.jquery.com/live/#event-delegation)から:* .live()メソッドは、イベント委譲を使用してDOMに追加されました。祖先要素にバインドされたハンドラは、その子孫でトリガされるイベントを処理します。渡されたハンドラ。live()は要素にバインドされません。 .live()は特別なハンドラをDOMツリーのルートにバインドします* - それは 'delegate()'のようですが、DOMのルートで動作しますので、 'delegate()'](http://api.jquery.com/delegate/)。 – treeface

+1

@Bob:セレクタを使って "http"で始まる属性だけを選択する限り、jQueryの[セレクタで始まる属性](http://api.jquery.com/attribute-starts-with-selector/)を参照してください。あなたのケースでは、あなたは '$( 'a [href^=" http "')。live(...)' – treeface

答えて

3

jQueryを使用する場合は.live()メソッドを使用できます。

通常、イベントハンドラをバインドする場合、イベントハンドラは特定の要素セットにバインドされます。将来追加される要素は、再バインドされない限り、イベントハンドラを受信しません。

jQueryの.live()メソッドは、独自の特別なイベントハンドラをDOMツリーのルートにバインドすることで回避します(イベントのバブリングに依存します)。要素をクリックすると、イベントハンドラが直接アタッチされていない場合、イベントはDOMツリーをバブルアップします。 jQueryの特別なイベントハンドラは、イベントをキャッチし、そのターゲットを調べ、.live()によってターゲットに割り当てられたユーザ指定のイベントハンドラを実行します。

+0

すばらしい説明、ありがとう! –

0

jQueryのlive機能を調べてください。ロード中にコントロールが作成されたとき、および新しいコントロールが作成されたときに、イベントにアタッチすることができます。パフォーマンスのペナルティはありますが、多くの要素をロードしていない限り、それは重要ではありません。

0

.live() jQueryメソッドを使用すると、ページのロードが完了した後に作成される要素にリスナーを追加できます。 (私はそれを正しく理解している場合)出口リンクのあなたの例を使用する:

$(function(){ 
    $('a.exitLink').live('click',function(event){ /* do stuff when a link of class exitLink is clicked */); 
}); 

これは関係なく、それが作成されたときの、クラスexitLinkのいずれかのリンクをclickイベントに応答します(前またはonload火事の後)。

・ホープ、このことができます:)

0

をはい簡単に言えば、あなたが前にこれを持っていたかもしれない。ここで

$('selector').click(function() {}); 

でそれを置き換えます。好奇心として

$('selector').live('click', function() {}); 
関連する問題