2012-03-14 17 views
3

実行時に新しいdivを追加すると、新しく作成されたdivはドキュメントハンドラでイベントハンドラと接続されません。例えば新しく追加されたdivは、ドキュメントハンドラでイベントハンドラを継承しません

、文書準備で現在のイベントハンドラに新しいdiv要素を割り当てる方法http://jsfiddle.net/nFG24/

+1

可能な複製を作品だ、1.4+ jqueryのために利用可能です8029589/jquery-1-7-on-and-off-methods-for-dynamic-elements)を参照してください。動的要素でトリガされたイベントを処理するには、 'on()'(以前は 'live()'や 'delegate()')を使う必要があります。 –

+0

は(1.7)またはライブイベントで使用する必要があります – sandeep

答えて

8

ショートカットイベントハンドラ(例えばclick()mouseover()など)のみページの読み込みでDOMに利用可能である要素に適用されます。動的に要素を追加するときは、このように、静的な親要素にイベントを添付し、あなたがにイベントを委譲したいフィルタを供給する必要があります。私は主セレクタとして、ここでbodyを使用しました

$("body").on('mouseover', '.hoverme', function() { 
    $(this).css({backgroundColor: '#000'});      
}); 
$("body").on('mouseout', '.hoverme', function() { 
    $(this).css({backgroundColor: '#0af'});     
}); 

注意を。理想的には、DOMに動的に追加されない.hoverme要素に最も近い要素を使用してください。

Working fiddle

また、あなたは少しhover()を使用してコードを整理することができます

$("body").on('hover', '.hoverme', function(e) { 
    if (e.type === 'mouseenter') 
     $(this).css({backgroundColor: '#000'}); 
    else 
     $(this).css({backgroundColor: '#0af'});   
}); 

Example fiddle

1

まだ.on()を使ってみましたか? jQuery 1.7の古いバージョンでは.bind()?

.on()

説明:選択した要素に1つ以上のイベント のイベントハンドラ関数を取り付けます。

http://api.jquery.com/on/

.bind()

説明:要素のイベントにハンドラをアタッチ。

http://api.jquery.com/bind/

0

または(ライブ使用してください)。これは、1.7では非推奨となったが、まだ[jQueryの上の1.7()とオフ()動的な要素のための方法](http://stackoverflow.com/questions/の

$(".hoverme").live('mouseover', function() 
{ 
    $(this).css({backgroundColor: '#000'});      
}); 
$(".hoverme").live('mouseout', function() 
{ 
    $(this).css({backgroundColor: '#0af'});     
}); 
+0

thx。それも動作しますが、廃止予定のイベントハンドラを使用することによって欠点がありますか? – NoOne

+0

はい - 今後jqueryの新しいバージョンにアップグレードすると、動作しない可能性があります。 'delegate()'は 'live()'のより良い代替手段ですが、これもjQuery 1.7の 'on()'で置き換えられました。 –

+0

これは、他の機能を壊すことなくjqueryをアップグレードするだけでなく、古いjqueryのバージョン –

関連する問題