2011-12-30 10 views
0

jQueryを使って何かをページに追加すると(.append経由)、私が設定したクラスアクションは新しい要素には当てはまらないようです。
たとえば、私の$(document).ready関数では、$(".clickable").click(doSomething)という関数を追加します。これは呼び出される前にページ上のものに適用されますが、clickableクラスで何かを追加すると、clickableクラス。クラスに適用したアクションに従うためにjQueryで追加する要素を取得するにはどうすればよいですか?

私が掲示している間に、エフェクトを追加した後に$(".clickable").click(doSomething);を呼び出すことでこの問題を回避できることに気づいたが、追加するすべての要素に対してdoSomethingをさらに呼び出すようにする。
つまり、クリック可能なクラスをクリックしたときに5つの要素を追加した場合、doSomethingは1回のクリックで5回連続して呼び出されます。

さらに洗練されたソリューションがあると思いますので、私はelamentを追加するたびにjQueryアクションを呼び出す必要はありません。おそらく追加するよりスマートな方法がありますか?

答えて

4

には確かにはるかに優れたソリューションがあります。 onメソッドを使用して、クラスclickableを持つ現在および将来の要素のイベントハンドラをアタッチします。

$('body').on('click', '.clickable', function() { 
    .. 
}); 
+0

http://jsfiddle.netでこれの例を追加できますか? – Anurag

+0

決して心配していないそれは完全に何かだった、私はこれを3回記録し、なぜそれが繰り返されたのか疑問に思っていた! :) – UserZer0

1

使用live()やjqueryの1.7 on()

$(".clickable").live('click',function(){ 

//do something 

}); 
0

私はあなたがlivedelegateを探していると信じています。

http://api.jquery.com/live/

注意最新のjQueryを使用している場合、これはonに置き換えられました。