実行時に新しいdivを追加すると、新しく作成されたdivはドキュメントハンドラでイベントハンドラと接続されません。例えば新しく追加されたdivは、ドキュメントハンドラでイベントハンドラを継承しません
、文書準備で現在のイベントハンドラに新しいdiv要素を割り当てる方法http://jsfiddle.net/nFG24/
?
実行時に新しいdivを追加すると、新しく作成されたdivはドキュメントハンドラでイベントハンドラと接続されません。例えば新しく追加されたdivは、ドキュメントハンドラでイベントハンドラを継承しません
、文書準備で現在のイベントハンドラに新しいdiv要素を割り当てる方法http://jsfiddle.net/nFG24/
?
ショートカットイベントハンドラ(例えばclick()
、mouseover()
など)のみページの読み込みでDOMに利用可能である要素に適用されます。動的に要素を追加するときは、このように、静的な親要素にイベントを添付し、あなたがにイベントを委譲したいフィルタを供給する必要があります。私は主セレクタとして、ここでbody
を使用しました
$("body").on('mouseover', '.hoverme', function() {
$(this).css({backgroundColor: '#000'});
});
$("body").on('mouseout', '.hoverme', function() {
$(this).css({backgroundColor: '#0af'});
});
注意を。理想的には、DOMに動的に追加されない.hoverme
要素に最も近い要素を使用してください。
また、あなたは少しhover()
を使用してコードを整理することができます
$("body").on('hover', '.hoverme', function(e) {
if (e.type === 'mouseenter')
$(this).css({backgroundColor: '#000'});
else
$(this).css({backgroundColor: '#0af'});
});
まだ.on()を使ってみましたか? jQuery 1.7の古いバージョンでは.bind()?
.on()
説明:選択した要素に1つ以上のイベント のイベントハンドラ関数を取り付けます。
http://api.jquery.com/on/
.bind()
説明:要素のイベントにハンドラをアタッチ。
または(ライブ使用してください)。これは、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'});
});
thx。それも動作しますが、廃止予定のイベントハンドラを使用することによって欠点がありますか? – NoOne
はい - 今後jqueryの新しいバージョンにアップグレードすると、動作しない可能性があります。 'delegate()'は 'live()'のより良い代替手段ですが、これもjQuery 1.7の 'on()'で置き換えられました。 –
これは、他の機能を壊すことなくjqueryをアップグレードするだけでなく、古いjqueryのバージョン –
可能な複製を作品だ、1.4+ jqueryのために利用可能です8029589/jquery-1-7-on-and-off-methods-for-dynamic-elements)を参照してください。動的要素でトリガされたイベントを処理するには、 'on()'(以前は 'live()'や 'delegate()')を使う必要があります。 –
は(1.7)またはライブイベントで使用する必要があります – sandeep