は、次の点を考慮するためにイベントをバインドするための最良の方法:はJQuery:動的に作成された要素
var template = '<div class="dynamic">Some markup</div>'
, $template = $(template);
$template.on('click.namespace.data-api', function(e) { doStuff() });
$('div.#parent').append($template);
私にはイベントが接続されているので、これは、ノードにイベントをバインドするための最も最適な方法であると思われますすでにjQueryオブジェクトとして導入されているノード。しかし、私は実際のクリックイベント中にこれがどのように働くのか分かりません。 jQueryはイベントがjQueryオブジェクトにバインドされているので、すぐにこの要素を見つけることができますか? 。
var template = '<div class="dynamic">Some markup</div>'
, $template = $(template);
$('div.#parent').append($template);
$('div.#parent').on('click.namespace.data-api', 'div.dynamic', function(e) { doStuff() });
これらのコードスニペットでは異なることがあるので、私はあなたが何を求めているのか分かりません。最初は新しい要素を作成し、それをページに追加します。これは2番目の要素では行いません。これらはまた、異なる要素にクリックハンドラを追加します(おそらく、同じ効果が観察されます)。あなたが2つの理由を比較しているのかどうか、それは私には分かりません。 – David
jQueryは、DOMにまだ挿入されていないにもかかわらず、このケースではフラグメント(これはあなたの '$ template'です)に' .on() 'を介してクリックイベントリスナーをバインドすることをサポートしています:https://github.com/jquery /api.jquery.com/issues/548 – Terry
@David、わかりやすくするために更新しました。 2番目の例では、 'div.dynamic'子ノードのクリックをリッスンする親ノードにハンドラを追加します。 –