2012-06-25 22 views
6

私はプロジェクトに取り組んでいます。ここでは、同じクラスの多くの要素をページに追加し、これらのクラスをすべて$(セレクタ) 。クリック();イベントハンドラ。同じクラスの動的に追加された要素のどれもがクリックに反応していないことが起こっています。 jsFiddleへjQueryが動的にページに追加されたクラスを認識しない

リンク:http://jsfiddle.net/8LATf/3/

  • あなたに私が何を意味するかの優れた画像を与えるために、私は私のプロジェクトの実際の問題に非常によく似ているサンプルjsFiddleを作っクラス "added_element"の1つの要素は、すでにロードされているときにそのページにあります。この要素はクリック可能です。

  • ボタンをクリックし、追加されたボタンを使用して動的にページに "added_element"クラスの他の要素を動的に追加します。これらの要素のいずれもクリック可能ではありません。

クラス「added_element」のすべての要素をクリック可能にするにはどうすればよいですか?私はそれがイベントハンドラで使用するセレクタと関係があると思いますが、私はそれを把握することができませんでした。

何か助力が大変ありがとうございます。

答えて

8

You need to delegate your handler。最も簡単な方法は、(これは.live()はjQueryの1.7のように、内部的に変換される方法です).on('click', ...)を使用してdocumentにすべてを委任することです:

$(document).on('click','.added_element',function() { 
    var id = $(this).attr('id'); 
    alert(id);  
}); 

​http://jsfiddle.net/mblase75/8LATf/4/

しかし、あなたのケースでは、あなたがに委譲することができます#container、その中に追加された要素がすべて表示されるためです。可能な限り効率の理由から、最も近い可能性のあるDOM要素への委任が好ましい

$('#container').on('click','.added_element',function() { 
    var id = $(this).attr('id'); 
    alert(id);  
}); 

​http://jsfiddle.net/mblase75/8LATf/5/

+0

優れています。助けてくれてありがとう。私はlive()が推奨されていないことを覚えています。 –

+0

私は同じ問題を抱えていますが、到達しようとしているdivだけが#containerの直下の子ではありません。 jQueryはこれによってまだそれに到達していないようです。何か案は? – Cos

-1

あなたが「added_element」にイベントハンドラをアタッチすると、スクリプト経由で動的に作成されたものは、DOMではありません。したがって、新しく作成された要素に関連付けられたイベントハンドラはありません。

これを回避するには、イベントハンドラを代わりにdivを含むdivに追加し、 "added_element"を探しさせます。

jfiddle: http://jsfiddle.net/yKJny/

+0

答えを「自己完結型」にしてください。あなたのデモをクリックすることなく、 '.live'や' .on'を使っているかどうかわかりません。あなたのリンクが死んだら、あなたの答えは役に立たない。 – Sparky

+0

OPはjfiddleを使用していたので、彼を作業中のものに戻すのは簡単です。私はフィッシュスコアにはここにいません、私はOPを助けたいだけです。しかし、ちょうどあなたのために、私はコメントにも私の解決策をタイプします!:) – ninja

+0

それはあなたの答えがあなたのリンクが死んだときにあなたの答えを読む人の利益のためにです。この場所の目的は、OPのニーズを超えています。ありがとうございました。 – Sparky

0

あなたがここにイベントの委任を使用する必要があり、イベントをバインドする正しい方法は次のようになります。ここでは

$('#container').on('click', '.added_element', function() { 
    var id = $(this).attr('id'); 
    alert(id); 
}); 

corrected fiddleです。

+0

助けてくれてありがとう、答えは受け入れられた答えと同じだったが、他の人が最初に投稿した。 –

関連する問題