2011-07-03 9 views
2

まず、別のプラグインでこれをやりたいとは思わない... jQueryにはすでにlive()メソッドで必要なものの99%を実行する機能があります。jQueryでは、新しい要素が追加されたときに「ライブ」メソッドを使用して警告するにはどうすればよいですか?

基本的に、私はこれを変更したい:この中

$(".some-button").live("click", function() { alert('yay!'); }); 

$(".some-button").live(function() { alert('yay!'); }); 

だから、私は何を言っていることは、私は要素があるときにすぐにメソッドを起動したいということですページに追加されました... jQueryは既にこのSOOOを閉じることができますこれは、それが上の私の例でも "クリック"を追加する方法ですからです!

これを実現するには、別のプラグインを追加せずに、「ライブ」と「ダイ」の方法と同じ機能を使用するだけですか?

+0

これは役立つかもしれない:http://stackoverflow.com/questions/815074/jquery-doesnt-see-new-elements – Kon

答えて

2

これを実行するブラウザ間の方法はありません.jQuery自体には何もありません。

プラグインを使用するか、新しい要素のコードを手動で管理するだけで済みます。

live()[docs]メソッドおよびdelegate()[docs]メソッドは、イベント処理のためのものです。あなたが与えたコードは、DOM操作ではなくブラウザイベントにのみ反応します。


DOMに新しい要素を追加するとき、それは任意のコードを実行されないため.live()がこれを行うことはありません理由があります。 DOMの変更は監視されません。むしろdocumentにバブルしたイベントに応答し、ハンドラが指定したセレクタと一致する場合にハンドラを呼び出します。

+0

ああ、今私は理解して.. 。 "生きている"というのは、一旦追加されたオブジェクトにクリックイベントハンドラを追加していないのではなく、ページに「クリック」を追加して、問題の要素が基準に一致すると、その要素! –

+0

@ティモシー:まさに。 '.live()'に関するよくある誤解です。これは、ドキュメント全体のイベントデリゲーションです。だから私は '.delegate()'を使いたいのですが、まったく同じですが、デリゲートをドキュメント全体よりももっと集中させることができます。 – user113716

4

ここで私は、少なくともFFに、フィドルで動作するように思われるコピーして貼り付けてきたいくつかのコードです:http://jsfiddle.net/KQBzn/

$(document).bind('DOMNodeInserted', function(event) { 
     alert('inserted ' + event.target.nodeName + // new node 
      ' in ' + event.relatedNode.nodeName); // parent 
}); 

ソース:http://forum.jquery.com/topic/how-to-get-notified-when-new-dom-elements-are-added

+0

Chromeでも動作します。 –

+0

Freackin 'awesome !!あまりにも悪いこれはIE8以下では動作しません。 – trusktr

0

あなたは.liveでそれを行うことはできませんが、 () 方法。

jQueryは.live()メソッドに機能を追加して、イベント名の代わりに 'created'のような特定のキーワードで使用すると、作成した要素に対して関数を実行できるようにする必要があります。それはクールだろう!例えば、理想的なシナリオは次のようになります:

$('.foobar').live('created', function() { 
    // do something with each newly created .foobar element here. 
}); 
関連する問題